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