[英]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.