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::cout
auto it=l.begin();
返回
std::list::end()
,因为容器当前为空。您永远不能在此位置插入项;因此测试将始终失败。
它仍然是一个有效的迭代器。基本上,如果您打印
(it==l.end())
相反,程序输出1。正如@RichardCritten指出的,
it==l.end()
,而
it2
将输出。因此,您得到的结果是预期的结果。这里没有无效的迭代器。“这不表明迭代器已通过插入列表而无效。”不,它没有显示这一点。@Arcinde:你是对的,值得注意的是,插入前后都是一样的。Re:“最初
可能会保留一个null ptr,因为列表是空的。”可能不会。但这没关系,只要满足迭代器的要求。