具有状态分配器的std :: vector :: swap是否应该使所有迭代器无效?

问题描述

| 给定分配器
a1
a2
,其中
a1
!=
a2
, 和
std::vector
v1(a1)
v2(a2)
然后ѭ7使所有迭代器无效。 这是预期的行为吗?     

解决方法

        通常,
swap
永远不会使迭代器无效。但是,当分配器不同时,另一个规则也会起作用。在这种情况下,行为取决于ѭ9和ѭ10。如果两者都为真,则分配器与数据一起交换,所有迭代器保持有效。如果其中一个为假,则行为是不确定的,因此允许VC ++ 2010展示特定行为。 从
[container.requirements.general]
起(字词来自n3290):   仅当
allocator_traits<allocatortype>::propagate_on_container_copy_assignment::value
时,才通过复制分配,移动分配或交换分配器来执行分配器替换,   在相应的容器操作的实现中,ѭ13或or14是正确的。除非正在交换的对象具有比较等于或“ 14”为真的分配器,否则调用容器交换函数的行为是不确定的。 和   在交换之前,每个迭代器在一个容器中引用一个元素,在交换之后,每个迭代器应在另一个容器中引用相同的元素 和   除非另有说明,否则没有任何
swap()
函数会使引用被交换容器的元素的任何引用,指针或迭代器无效。 23.3.6.5没有为“ 17”指定替代规则。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...