[英]Understanding iterator/const_iterator implementation
我知道如何在表面級別使用迭代器,但我試圖了解迭代器如何與容器類(例如vector
。
std::vector
是 std 命名空間中的類模板,它使std::vector<double>
成為一個類。
std::vector<T>::iterator
是std::vector<T>
下的嵌套類型
據我所知,類模板vector
有一個iterator
類型的成員,它從#include <iterator>
的類模板中獲取。
這令人困惑,因為當我查看http://www.cplusplus.com/reference/iterator/iterator/時, #include <iterator>
沒有我可以看到的const_iterator
類模板?
從評論中收集的信息:
來自#include <iterator>
std::iterator
從 C++17 開始被棄用
它被廢棄之前,對STL容器(這是實現定義)來實現的迭代器與的幫助下是可能std::iterator
模板類。
以vector
為例:
std::vector
的規范中沒有任何內容表明vector::iterator
或vector::const_iterator
與std::iterator
有任何特殊關系(即使在std::iterator
棄用之前的std::iterator
)。 此外,雖然iterator
和const_iterator
是在vector
范圍內聲明的類型,但不要求vector
具有任一類型的成員 -iterator
和const_iterator
是std::vector
接口的一部分,例如成員begin()
重載返回這些類型,但沒有說明這些函數如何獲得它們返回的迭代器
STL 容器中需要和不需要的是:
“返回迭代器(或滿足迭代器要求的原始指針)的開始和結束函數。沒有任何內容表明迭代器需要在容器中實現。”
STL 容器定義了那些成員類型( iterator
、 const_iterator
等),通常具有某些迭代器類別的類型別名,例如LegacyRandomAccessIterator
,其定義為“指向數組元素的指針滿足LegacyRandomAccessIterator
所有要求”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.