C++ std::list insert()使迭代器无效?
假设我有一个简单的程序:C++ std::list insert()使迭代器无效?,c++,list,insert,listiterator,C++,List,Insert,Listiterator,假设我有一个简单的程序: int main(void) { std::list<int> l; auto it = l.begin(); auto it2 = l.insert(l.begin(), 5); std::cout << (it == it2) << std::endl; } int main(无效){ std::列表l; 自动it=l.begin(); 自动it2=l.insert(l.begin(),5); std::cout
int main(void) {
std::list<int> l;
auto it = l.begin();
auto it2 = l.insert(l.begin(), 5);
std::cout << (it == it2) << std::endl;
}
int main(无效){
std::列表l;
自动it=l.begin();
自动it2=l.insert(l.begin(),5);
std::coutauto it=l.begin();
返回std::list::end()
,因为容器当前为空。您永远不能在此位置插入项;因此测试将始终失败。它仍然是一个有效的迭代器。基本上,如果您打印(it==l.end())
相反,程序输出1。正如@RichardCritten指出的,it==l.end()
,而it2
将输出。因此,您得到的结果是预期的结果。这里没有无效的迭代器。“这不表明迭代器已通过插入列表而无效。”不,它没有显示这一点。@Arcinde:你是对的,值得注意的是,插入前后都是一样的。Re:“最初它可能会保留一个null ptr,因为列表是空的。”可能不会。但这没关系,只要满足迭代器的要求。