[英]what is the type of an iterator in STL?
C ++中的每個變量都有類似int i
的類型, i
有int
類型。 同樣,我們在STL中有迭代器,我們聲明它是這樣的
map<string,int>::iterator it .
這里的類型是it
? 是指針類型還是指針類型,因為在存儲int或其他類型的向量的情況下,我們熱切地尊重迭代器以獲取與這些迭代器關聯或指向的值? 還是運算符*
對於STL中的迭代器是重載的?
它是什么類型的
it
?
的類型的it
是map<string,int>::iterator
,這是與一群重載操作符的一個類。
對於某些容器類型, Container::iterator
可能是原始指針類型。 對於map
,它必須是一個類。
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 ++泛型編程和traits類中的一個很好的案例研究。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.