std :: move()是否使迭代器失效?
这个问题在这里已经有了答案:
在http://en.cppreference.com笔记(重点是我的)之后:
在容器移动赋值(重载(2))之后,除非元素移动赋值由不兼容的分配器强制,否则对其他元素的引用,指针和迭代器 (除了结束迭代器) 仍然有效 ,但引用现在在* this中的元素。 目前的标准通过第23.2.1节[container.requirements.general] / 12中的一揽子声明作出这一保证,并且正在考虑通过LWG 2321
笔记
正如hvd指出的那样,至少有一次情况是移动助理被迫使迭代器无效 - 当新的容器具有不兼容的分配器时。
正如Ben Voigt指出的那样,在这个主题上有更广泛的讨论,它实际上已经涵盖了问题的c ++ 11方面......
不,他们不应该在移动操作后失效。
23.3.6.5/1
插入点之前的所有迭代器和引用都不受影响,除非新的容器大小大于先前的容量(在这种情况下,所有迭代器和引用都将失效)
链接地址: http://www.djcxy.com/p/94461.html