簡體   English   中英

理解迭代器/const_iterator 實現

[英]Understanding iterator/const_iterator implementation

我知道如何在表面級別使用迭代器,但我試圖了解迭代器如何與容器類(例如vector

根據為什么我們在迭代器之前放 ::(范圍解析運算符)?

std::vector是 std 命名空間中的類模板,它使std::vector<double>成為一個類。

std::vector<T>::iteratorstd::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::iteratorvector::const_iteratorstd::iterator有任何特殊關系(即使在std::iterator棄用之前的std::iterator )。 此外,雖然iteratorconst_iterator是在vector范圍內聲明的類型,但不要求vector具有任一類型的成員 - iteratorconst_iteratorstd::vector接口的一部分,例如成員begin()重載返回這些類型,但沒有說明這些函數如何獲得它們返回的迭代器

  • STL 容器中需要和不需要的是:

    “返回迭代器(或滿足迭代器要求的原始指針)的開始和結束函數。沒有任何內容表明迭代器需要在容器中實現。”

  • STL 容器定義了那些成員類型( iteratorconst_iterator等),通常具有某些迭代器類別的類型別名,例如LegacyRandomAccessIterator ,其定義為“指向數組元素的指針滿足LegacyRandomAccessIterator所有要求”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM