我看到某處它提到:C++迭代器for循環陷阱?
for (itr = files.begin(); itr < files.end(); ++itr) // WRONG
for (itr = files.begin(); itr != files.end(); ++itr) // ok
爲什麼是第一個表達錯了嗎?我總是使用第一個表達式,並沒有任何問題。
我看到某處它提到:C++迭代器for循環陷阱?
for (itr = files.begin(); itr < files.end(); ++itr) // WRONG
for (itr = files.begin(); itr != files.end(); ++itr) // ok
爲什麼是第一個表達錯了嗎?我總是使用第一個表達式,並沒有任何問題。
排序比較,如<
,>
,<=
,>=
將隨機訪問迭代器,但許多其他的迭代器(如鏈表雙向迭代器)工作僅支持(==
和!=
)相等性測試。通過使用!=
,您可以稍後替換容器而無需更改太多代碼,這對於需要使用許多不同容器類型的模板代碼尤其重要。
有不同類型的迭代器。只有隨機訪問迭代器支持<
運算符。其他類型的迭代器(雙向,輸入,輸出和轉發)不會。但是所有迭代器都支持==
和!=
運算符。因此,如果您使用!=
,您的代碼將適用於所有類型的迭代器。
前者僅適用於支持operator <
的迭代器,並非所有迭代器都這樣做。