C++中的每個變量都有一些類型,如int i
,i
有一個類型int
。 同樣,我們在STL迭代器,我們宣佈說這句話STL中迭代器的類型是什麼?
map<string,int>::iterator it .
什麼是it
在這裏的類型?它是指針類型,還是指針類型爲 我們通常會讓迭代器在存儲int或其他類型的向量的情況下獲取這些itearors關聯或指向的值。或者運算符*
被重載用於STL中的迭代器?
C++中的每個變量都有一些類型,如int i
,i
有一個類型int
。 同樣,我們在STL迭代器,我們宣佈說這句話STL中迭代器的類型是什麼?
map<string,int>::iterator it .
什麼是it
在這裏的類型?它是指針類型,還是指針類型爲 我們通常會讓迭代器在存儲int或其他類型的向量的情況下獲取這些itearors關聯或指向的值。或者運算符*
被重載用於STL中的迭代器?
24.2.1/1 [iterator.requirements.general]概括起來很好:
迭代器是指針,允許C++程序以均勻的具有不同數據結構(容器)的工作的概括方式。爲了能夠構建在不同類型的數據結構上正確高效工作的模板算法,該庫不僅形式化了接口,而且還形式化了迭代器的語義和複雜度假設。
短語「指針的泛化」意味着指針是迭代器。允許std::vector<T>::iterator
是一個typedef T *
。但是,大多數迭代器通過操作符重載來實現接口。 (請注意,迭代器不需要屬於容器,也可以)。
這種語言是C++標準編寫方式的典型代表。它描述了事情的行爲,但是避免了用基類來定義接口。有各種迭代器:輸入,輸出,轉發,雙向和隨機訪問。每種規範都有不同的規定,雖然隨機訪問是雙向接口的嚴格超集,但它們在C++類型系統中完全無關。
迭代器可以是++
和*
重載的任何類,並且有效的專用std::iterator_traits
。有是基類std::iterator
它與std::iterator_traits
一起使用來定義必要的接口。這是C++泛型編程和特徵類的一個很好的案例研究。
std :: map :: iterator那麼tpedef會是什麼呢? 'T *'或'T1 *'? –
Invictus
2012-04-28 13:56:16
@Ritesh'std :: map :: iterator'與指針有着根本的區別,所以它也不能。 – Potatoswatter 2012-04-28 14:01:29
+1用於定義行爲。 – 2012-04-28 14:32:09