迭代器失效规则 C++容器的迭代器失效规则是什么?
最好采用摘要列表格式 (注:这意味着是[堆栈溢出的C++ FAQ ]的条目(https://stackoverflow.com/questions/tagged/c++-faq)。如果你想对以这种形式提供faq的想法提出批评,那么[开始这一切的meta上的帖子](https://meta.stackexchange.com/questions/68647/setting-up-a-faq-for-the-c-tag)这个问题的答案在[C++聊天室]中监控(https://chat.stackoverflow.com/rooms/10/c-lounge),这是常见问题解答的最初想法,因此您的答案很可能会被提出此想法的人阅读。)_ C++03(来源:)迭代器失效规则 C++容器的迭代器失效规则是什么?,c++,c++11,iterator,c++17,c++-faq,C++,C++11,Iterator,C++17,C++ Faq,最好采用摘要列表格式 (注:这意味着是[堆栈溢出的C++ FAQ ]的条目(https://stackoverflow.com/questions/tagged/c++-faq)。如果你想对以这种形式提供faq的想法提出批评,那么[开始这一切的meta上的帖子](https://meta.stackexchange.com/questions/68647/setting-up-a-faq-for-the-c-tag)这个问题的答案在[C++聊天室]中监控(https://chat.stackov
插入 序列容器
:插入点之前的所有迭代器和引用不受影响,除非新容器大小大于以前的容量(在这种情况下,所有迭代器和引用无效)[23.2.4.3/1]vector
:所有迭代器和引用均无效,除非插入的成员位于deque的末端(前面或后面)(在这种情况下,所有迭代器均无效,但对元素的引用不受影响)[23.2.1.3/1]deque
:所有迭代器和引用不受影响[23.2.2.3/1]列表
:所有迭代器和引用不受影响[23.1.2/8][multi]{set,map}
:从底层容器继承堆栈
:从基础容器继承队列
:从基础容器继承优先级\u队列
擦除 序列容器
:擦除点后的每个迭代器和引用无效[23.2.4.3/3]vector
:所有迭代器和引用无效,除非删除的成员位于deque的末端(前面或后面)(在这种情况下,只有迭代器和对删除成员的引用无效)[23.2.1.3/4]deque
:只有迭代器和对已删除元素的引用无效[23.2.2.3/3]列表
:只有迭代器和对已擦除元素的引用无效[23.1.2/8][multi]{set,map}
:从底层容器继承堆栈
:从基础容器继承队列
:从基础容器继承优先级\u队列
调整大小
:根据插入/删除[23.2.4.2/6]矢量
:根据插入/删除[23.2.1.2/1]deque
:根据插入/删除[23.2.2.2/1]列表
附注1 除非另有规定(或 显式地或通过定义函数 就其他函数而言),调用 容器成员函数或传递函数 容器作为a的参数 图书馆职能不应失效 迭代器用于或更改, 该容器中的对象。 [23.1/11] 附注2 );无论如何,您应该假设它们是(实际上就是这样) 附注3 指针无效的规则与引用无效的规则相同。C++03(来源:)
插入 序列容器
:插入点之前的所有迭代器和引用不受影响,除非新容器大小大于以前的容量(在这种情况下,所有迭代器和引用无效)[23.2.4.3/1]vector
:所有迭代器和引用均无效,除非插入的成员位于deque的末端(前面或后面)(在这种情况下,所有迭代器均无效,但对元素的引用不受影响)[23.2.1.3/1]deque
:所有迭代器和引用不受影响[23.2.2.3/1]列表
:所有迭代器和引用不受影响[23.1.2/8][multi]{set,map}
:从底层容器继承堆栈
:从基础容器继承队列
:从基础容器继承优先级\u队列
擦除 序列容器
:擦除点后的每个迭代器和引用无效[23.2.4.3/3]vector
:所有迭代器和引用无效,除非删除的成员位于deque的末端(前面或后面)(在这种情况下,只有迭代器和对删除成员的引用无效)[23.2.1.3/4]deque
:只有迭代器和对已删除元素的引用无效[23.2.2.3/3]列表
:只有迭代器和对已擦除元素的引用无效[23.1.2/8][multi]{set,map}
:从底层容器继承堆栈
:从基础容器继承队列
:从基础容器继承优先级\u队列
调整大小
:根据插入/删除[23.2.4.2/6]矢量
:根据插入/删除[23.2.1.2/1]deque
:根据插入/删除[23.2.2.2/1]列表
附注1 除非另有规定(或 显式地或通过定义函数 就其他函数而言),调用 容器成员函数或传递函数 容器作为a的参数 图书馆职能不应失效 迭代器用于或更改, 该容器中的对象。
std::vector<int> v(10);
std::vector<int>::iterator it = v.begin() + 5;
std::insert_iterator<std::vector<int> > it_ins(v, it);
for (unsigned n = 20; n > 0; --n)
*it_ins++ = rand();