Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
迭代器失效规则 C++容器的迭代器失效规则是什么?_C++_C++11_Iterator_C++17_C++ Faq - Fatal编程技术网

迭代器失效规则 C++容器的迭代器失效规则是什么?

迭代器失效规则 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

最好采用摘要列表格式

(注:这意味着是[堆栈溢出的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(来源:)


插入 序列容器

  • vector
    :插入点之前的所有迭代器和引用不受影响,除非新容器大小大于以前的容量(在这种情况下,所有迭代器和引用无效)[23.2.4.3/1]
  • deque
    :所有迭代器和引用均无效,除非插入的成员位于deque的末端(前面或后面)(在这种情况下,所有迭代器均无效,但对元素的引用不受影响)[23.2.1.3/1]
  • 列表
    :所有迭代器和引用不受影响[23.2.2.3/1]
关联容器

  • [multi]{set,map}
    :所有迭代器和引用不受影响[23.1.2/8]
容器适配器

  • 堆栈
    :从底层容器继承
  • 队列
    :从基础容器继承
  • 优先级\u队列
    :从基础容器继承

擦除 序列容器

  • vector
    :擦除点后的每个迭代器和引用无效[23.2.4.3/3]
  • deque
    :所有迭代器和引用无效,除非删除的成员位于deque的末端(前面或后面)(在这种情况下,只有迭代器和对删除成员的引用无效)[23.2.1.3/4]
  • 列表
    :只有迭代器和对已删除元素的引用无效[23.2.2.3/3]
关联容器

  • [multi]{set,map}
    :只有迭代器和对已擦除元素的引用无效[23.1.2/8]
容器适配器

  • 堆栈
    :从底层容器继承
  • 队列
    :从基础容器继承
  • 优先级\u队列
    :从基础容器继承

调整大小
  • 矢量
    :根据插入/删除[23.2.4.2/6]
  • deque
    :根据插入/删除[23.2.1.2/1]
  • 列表
    :根据插入/删除[23.2.2.2/1]

附注1 除非另有规定(或 显式地或通过定义函数 就其他函数而言),调用 容器成员函数或传递函数 容器作为a的参数 图书馆职能不应失效 迭代器用于或更改, 该容器中的对象。 [23.1/11]

附注2 );无论如何,您应该假设它们是(实际上就是这样)

附注3 指针无效的规则与引用无效的规则相同。

C++03(来源:)


插入 序列容器

  • vector
    :插入点之前的所有迭代器和引用不受影响,除非新容器大小大于以前的容量(在这种情况下,所有迭代器和引用无效)[23.2.4.3/1]
  • deque
    :所有迭代器和引用均无效,除非插入的成员位于deque的末端(前面或后面)(在这种情况下,所有迭代器均无效,但对元素的引用不受影响)[23.2.1.3/1]
  • 列表
    :所有迭代器和引用不受影响[23.2.2.3/1]
关联容器

  • [multi]{set,map}
    :所有迭代器和引用不受影响[23.1.2/8]
容器适配器

  • 堆栈
    :从底层容器继承
  • 队列
    :从基础容器继承
  • 优先级\u队列
    :从基础容器继承

擦除 序列容器

  • vector
    :擦除点后的每个迭代器和引用无效[23.2.4.3/3]
  • deque
    :所有迭代器和引用无效,除非删除的成员位于deque的末端(前面或后面)(在这种情况下,只有迭代器和对删除成员的引用无效)[23.2.1.3/4]
  • 列表
    :只有迭代器和对已删除元素的引用无效[23.2.2.3/3]
关联容器

  • [multi]{set,map}
    :只有迭代器和对已擦除元素的引用无效[23.1.2/8]
容器适配器

  • 堆栈
    :从底层容器继承
  • 队列
    :从基础容器继承
  • 优先级\u队列
    :从基础容器继承

调整大小
  • 矢量
    :根据插入/删除[23.2.4.2/6]
  • deque
    :根据插入/删除[23.2.1.2/1]
  • 列表
    :根据插入/删除[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();