参照同一矢量的数据插入矢量

Inserting in vector with reference to data of the same vector

本文关键字:数据 插入      更新时间:2023-10-16

我目前想要在向量中复制一些元素。简而言之,我的代码类似于以下内容:

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 &)

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

我目前使用的STL的实现(MSVC2013)包含对这种插入的保护,因为如果需要realloc,它将复制我的元素。然而,我不确定我是否能够依赖这种行为,或者它是否要求我首先自己复制?(在升级到新的STL实现时,我宁愿避免自己看到这种错误)

简而言之:我可以在一个向量上调用insert()并引用同一向量中的元素吗?

你很好。

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

但其中CCD_ 5为计数且CCD_ 6为值的呼叫CCD_。

早在C++11天,这一问题就被明确提出,并作为NAD关闭,理由是"vector::insert(iter, value)必须工作,因为标准没有允许它不工作。"