首页 > 试题广场 >

下面关于迭代器失效的描述哪个是错误的()

[单选题]
下面关于迭代器失效的描述哪个是错误的()
  • vector的插入操作不会导致迭代器失效
  • map的插入操作不会导致迭代器失效
  • vector的删除操作只会导致指向被删除元素及后面的迭代器失效
  • map的删除操作只会导致指向被删除元素的迭代器失效
推荐
选A,因为由 Vector 的 iterator 和 listIterator 方法所返回的迭代器是快速失败的 :如果在迭代器创建后的任意时间从结构上修改了向量(通过迭代器自身的 remove 或 add 方法之外的任何其他方式),则迭代器将抛出 ConcurrentModificationException。
编辑于 2015-06-17 21:18:15 回复(0)
A
vector是顺序存储的,只有在尾部插入才不会导致迭代器失效,在头部插入或者中间插入都会导致插入的部位以及其后的所有迭代器都失效;
map是映射,key和value是一一对应的,在内存中是零散存在的,迭代器通过key找到value,无论怎么插入都不会让迭代器失效,当然删除只会使得被删除元素的迭代器失效
发表于 2015-06-04 19:30:55 回复(6)
A
顺序容器在删除插入时伴随着数据的移动,会导致迭代器失效
发表于 2015-06-01 14:07:08 回复(0)
答案 A
  • vector的插入操作会导致迭代器失效
  • verctor是数组的形式

发表于 2015-01-13 12:15:02 回复(0)
vector 动态增加大小时,并不是在原空间后增加新空间,而是以原大小的两倍在另外配置一个较大的新空间,然后将内容拷贝过来,接着再原内容之后构造新元素,并释放原空间,由于插入操作改变了空间,故迭代器会失效~

发表于 2015-08-12 17:03:30 回复(1)
a
容器类 插入 删除
list 所有迭代器不失效 有且仅有被删除的节点的迭代器才失效
vector 当 vector 的容量(不是size)不改变时, 只失效之后的迭代器, 否则全部失效 被删除节点之后的迭代器全部失效
set, map 所有迭代器不失效 有且仅有被删除的节点的迭代器才失效
发表于 2016-07-19 15:35:21 回复(0)
a
vector是顺序储存,器插入元素后会使后面的元素向后移,所以会使指向后面的元素迭代器失效
map不是顺序存储插入删除元素不会引起其他元素的位置移动,所以只有删除元素时对指向删除元素的迭代器有影响
发表于 2015-03-06 08:17:26 回复(0)

在std::vector中,插入和删除操作都可能会导致迭代器失效。具体来说:

  • 在进行插入操作时,如果需要分配新的内存空间,则所有指向原 vector 中元素的迭代器都会失效。
  • 在进行删除操作时,被删除元素及后面的元素都会向前移动一个位置,导致指向这些元素的迭代器全部失效。

因此,选项A "vector的插入操作不会导致迭代器失效" 描述是错误的。

其他选项的描述都是正确的:

  • std::map的插入和删除操作都可能导致迭代器失效,因为插入和删除操作可能导致红黑树的结构发生变化。
  • std::vector的删除操作只会导致指向被删除元素及后面的迭代器失效。
  • std::map的删除操作只会导致指向被删除元素的迭代器失效。
发表于 2023-10-19 16:28:35 回复(0)
发表于 2022-10-07 21:43:15 回复(0)
vector 动态增加大小时,并不是在原空间后增加新空间,而是以原大小的两倍在另外配置一个较大的新空间,然后将内容拷贝过来,接着再原内容之后构造新元素,并释放原空间,由于插入操作改变了空间,故迭代器会失效~
发表于 2021-03-08 10:09:16 回复(0)
A
迭代失效
Vector是顺序存储  只有在尾部插入才不会导致迭代器失效,在头部插入或者中间插入都会导致插入的部位以及其后的所有迭代器都失效
Map是映射 key与value一一对应 在内存中是零散存在的  迭代器通过key找到value,无论怎么插入都不会让迭代器失效,当然删除只会使得被删除元素的迭代器失效


发表于 2019-07-23 09:04:00 回复(0)
迭代器简介:http://www.cnblogs.com/yc_sunniwell/archive/2010/06/25/1764934.html 
发表于 2017-04-19 21:31:18 回复(0)
vector的插入操作不会导致迭代器失效//vector是顺序存储的,只有在尾部插入才不会导致迭代器失效,只有这种数组插入最麻烦,要挨个往后移动才行,,,
map的插入操作不会导致迭代器失效//他会自动排序key,插了再排呗..
vector的删除操作只会导致指向被删除元素及后面的迭代器失效//对的,还是因为是基于数组的呗
map的删除操作只会导致指向被删除元素的迭代器失效//还是因为他的key是自动排序的,但是要注意,擦除后,就跳到下一个了,若是循环就没必要调用增量了,或者人为的减一下
编辑于 2016-11-15 23:16:13 回复(0)
C++ Primer 5th
Section 9.3, P343
Adding elements to a vector, string, or deque potentially invalidates all existing iterators, references, and pointers into the container.
发表于 2016-08-19 21:05:06 回复(0)
A
迭代器是个所谓的智能 指针,具有遍历复杂数据结构的能力.
迭代器使开发人员能够在类或结构中支持foreach迭代,而不必整个实现IEnumerable或者IEnumerator接口。只需提供一个迭代器,即可遍历类中的数据结构。当编译器检测到迭代器时,将自动生成IEnumerable接口或者IEnumerator接口的Current,MoveNext和Dispose方法。
发表于 2015-06-03 19:29:30 回复(0)
A
发表于 2015-06-03 18:58:06 回复(0)
A,vector这种顺序容器,他的插入和删除都会导致迭代器失效,且删除操作只会导致被删除元素及后面的迭代器失效
发表于 2015-06-02 14:24:47 回复(0)
A,插入后size大于capacity的话,会重新申请内存,所以可能失效
发表于 2015-04-09 13:24:58 回复(0)
a
发表于 2015-03-14 20:10:48 回复(0)