为什么这里给我的是3而不是0?

  • 本文关键字:这里 c++ list
  • 更新时间 :
  • 英文 :


创建一个列表:

list<int> l;
auto it = l.begin();
l.emplace(it, 0);
/*it =*/ l.emplace(it, 1);
/*it =*/ l.emplace(it, 2);

在这里打印

for (auto it : l)
cout << it << endl; // 0 1 2
cout << "nn";
cout << *it << endl; // = 3

为什么*it是3而不是0?

这一行:

auto it = l.begin();

列表中还没有任何内容,所以开始也是结束。

std::list::emplace()在给定迭代器之前插入项,因此这一行:

l.emplace(it, 0);

0放在it之前,即插入到列表末尾。

std::list也有一些最宽容的迭代器失效规则,并且it迭代器在将项插入列表时不会失效。当新的项被添加到列表中时,it继续引用列表的末尾。

最后,这一行:

cout << *it << endl;

取消引用"end"迭代器,这是不允许的。结果是undefined,在本例中,它似乎包含值3。也许如果你添加另一个项目,那么它看起来包含4,也许你看到的是list的一个隐藏的具体实现细节。或者计算机崩溃或会坏的鼻恶魔。

相关内容

  • 没有找到相关文章