有人能解释一下他们的意思是list.pushback文档(不会使迭代器无效)吗

can someone explain what they mean is list.pushback documentation (does not invalidate iterators)

本文关键字:文档 迭代器 无效 pushback 意思是 能解释 一下 他们的 list      更新时间:2023-10-16

在list.pushback中,文档显示

由于%列表的性质,此操作可以在常量中完成时间,并且不会使迭代器和引用无效。

add如何不能更改迭代器?他们所说的不使引用无效是什么意思?

感谢

这意味着在调用push_back之前获得的所有迭代器和引用在之后仍然可以使用

std::list<int> numbers { 2, 3, 5, 7};
auto it = numbers.begin();
int& r  = numbers.front();
numbers.push_back(11);
std::cout << *it << 'n';   // guaranteed to print 2
std::cout <<   r << 'n';   // guaranteed to print 2

其他数据结构不一定提供这样的保证。如果使用向量而不是列表,则每次对push_back的调用都可能使调用之前获得的所有迭代器和引用无效,因为容量可能会耗尽,在这种情况下,数据必须移动到更大的数组中。使用无效的迭代器或引用会导致未定义的行为(读作:任何事情都可能发生)。

作为一个例子,与行为std::vector进行比较。如果你这样做:

std::vector<int> foo(1);
std::vector<int>::iterator it = foo.begin();
foo.push_back(2);
*it = 0;

这是非法的——调用push_back的行为可能会导致矢量增长。这种增长会导致在释放旧的、较小的内存之前,分配新的内存,并将内容移动到其中。

std::list不适用。它是一个链接列表,因此添加新元素时不会更改列表中的其他元素。增长纯粹是当地的事情。

将元素附加到list不会更改其他元素,因此迭代器和对这些元素的引用仍然有效。