2010-06-22 122 views
9

我看到某處它提到:C++迭代器for循環陷阱?

for (itr = files.begin(); itr < files.end(); ++itr) // WRONG 
for (itr = files.begin(); itr != files.end(); ++itr) // ok 

爲什麼是第一個表達錯了嗎?我總是使用第一個表達式,並沒有任何問題。

回答

21

排序比較,如<><=>=將隨機訪問迭代器,但許多其他的迭代器(如鏈表雙向迭代器)工作僅支持(==!=)相等性測試。通過使用!=,您可以稍後替換容器而無需更改太多代碼,這對於需要使用許多不同容器類型的模板代碼尤其重要。

7

有不同類型的迭代器。只有隨機訪問迭代器支持<運算符。其他類型的迭代器(雙向,輸入,輸出和轉發)不會。但是所有迭代器都支持==!=運算符。因此,如果您使用!=,您的代碼將適用於所有類型的迭代器。

5

前者僅適用於支持operator <的迭代器,並非所有迭代器都這樣做。