参考同一向量的数据插入向量

JVA*_*pen 7 c++ stl vector stdvector

我目前处于一种情况,我想复制一个向量中的一些元素.简而言之,我的代码类似于以下内容:

std::vector<MyStruct> v;
// ...
auto toDuplicate = std::find(v.begin(), v.end(), [](const MyStruct &s) { return true; /*In reality, a bit more complex*/ });
v.insert(toDuplicate, nrOfDuplicates-1, *toDuplicate);
// Signature: insert(iterator, size_t, const value_type &)
Run Code Online (Sandbox Code Playgroud)

因此,在这种情况下,如果容量小于最终容量,则std :: vector必须重新分配其内部数据,使得我的引用插入的数据无效.

我正在使用的STL(MSVC2013)的实现包含对这种插入的保护,因为如果需要重新分配它将执行我的元素的副本.但是,我不确定我是否能够依赖这种行为,还是需要我自己先复制一份?(当我升级到新的STL实现时,我宁愿防止自己看到这种错误)

所以简而言之:我是否允许在向量上调用insert()并引用同一向量中的元素?

Mar*_*low 4

你很厉害。

例如,如果您查看表 99(序列容器要求),您会发现a.insert(p,i,j)(其中ij是迭代器)有前提条件:“i 和 j 不是 a 的迭代器”。

但调用a.insert(p,n,t)where nis a count 和tis a value 则没有这样的要求。

vector::insert(iter, value)这是在 C++11 时代明确提出的一个问题,并且由于 NAD 的理由“需要工作,因为标准不允许它不工作”而被关闭。