list<int> foo;
list<int> foo2;
list<int>::iterator foo_end = foo.end();
list<int>::iterator foo2_end = foo2.end();
for (list<int>::iterator it = foo.begin(); it != foo2_end; ++foo) <- notice != comparison here
{
...
它這可以嗎?它會正常工作。比較兩端()迭代器
我傾向於認爲這是實現相關的,任何人都知道,如果標準說這事?
這取決於迭代器的實現。一個簡單而不是很好的實現一個列表迭代器可能是一個指向該節點的指針,其中null指向一個末尾(這是一個常見的習慣用法)[可能是某個操作需要一個指向列表的指針],相等被定義爲所引用的節點地址的直接比較。標準中沒有任何內容會導致實施不合規。 – 2010-03-31 08:20:13
夠公平的,儘管我認爲商業級編譯器會更聰明些。畢竟,使接口易於正確使用和難以正確使用是一個很好的共同目標。 :) – 2010-03-31 14:47:14
@DavidRodríguez-dribeas「(一個)列表迭代器的實現可能是一個指向節點的指針,空指定一個結尾(這是一個常見的習慣用法)」你能否引用一個這樣的std :: list實施? – curiousguy 2011-09-29 21:15:13