繁体   English   中英

std :: list.unique()应该使迭代器无效?

[英]std::list.unique() should invalidate iterators?

我有以下代码:

#include <iostream>
#include <list>

int main()
{    
    typedef std::list<int> list;
    int i0t[5]={-1, 2, 3, 3, 5};
    list list_1(i0t, i0t+5);
    list::reverse_iterator ri0 = ++list_1.rbegin();    
    list_1.unique();
    list_1.remove(3);
    int val = *ri0; // why is this valid ?
    std::cout << "val = " << val << "\n";
    return 0;
}

我的直觉是ri0迭代器在
list_1.unique();
list_1.remove(3);
使用MS VS2005调试配置和_HAS_ITERATOR_DEBUGGING = 1
但是,我认为“迭代器调试”没有抓住这一点。 对 ?

谢谢。

我的直觉是ri0迭代器将变为无效

是的,会的。 根据§23.3.5.5

无效删除(常量T&值)

无效unique()

[...]仅使迭代器和对已删除元素的引用无效。

因此,程序的行为是不确定的。

23.3.5.5/15指出,对列表执行删除操作的效果只会使迭代器和对已删除元素的引用无效。 它没有指定该操作必须使那些迭代器无效。 迭代器保持有效是未指定的行为,并且不能保证在其他实现中发生。 但是,修改后访问迭代器是未定义的行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM