簡體   English   中英

C ++:列出迭代器與矢量迭代器

[英]C++: list iterators vs. vector iterators

我認為迭代器對象的想法是你可以類似地將它應用於C ++容器類。 但是,當我嘗試遍歷列表對象時,我嘗試使用

for(list<int>::iterator it = obj.begin(); it < obj.end(); it++){
    // some code
}

我收到了一個錯誤。 為什么這不起作用? 為什么它適用於vector::iterator 是僅僅因為列表的實現是雙向鏈表? 我認為迭代器對象抽象了通過容器移動的概念,從而允許它在操作上是相同的,無論是向量還是列表。

我真的很感激澄清。

這不起作用,因為與std::vector迭代器不同, std::list迭代器不是隨機訪問 - 它們是順序的。 你需要在它們上面使用!=

for(list<int>::iterator it = obj.begin(); it != obj.end(); it++)

通常,當您希望覆蓋整個范圍時,在所有迭代器上使用“not equals”是個好主意,即使這些迭代器允許比較<> 還有一個論點支持在你的常規for循環中使用!= ,因為它為你提供了最強的后置條件

您必須與!=進行比較,因為列表迭代器以隨機順序分散在所有內存中。

使用: for(list<int>::iterator it = obj.begin(); it != obj.end(); it++)

這是因為list不支持隨機訪問迭代器,而只支持轉發迭代器。 因此,沒有為list迭代器定義operator < 您必須使用operator !=進行不等式比較。

算術運算,包括排序比較運算符(如< ),僅為隨機訪問迭代器定義。 如果您更改代碼使用!= ,它將起作用(假設obj是一個list<int> ):

for(list<int>::iterator it = obj.begin(); it != obj.end(); it++){
    // some code
}

暫無
暫無

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

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