参照相同矢量的数据插入矢量
我目前处于想要在矢量中复制某些元素的情况。 总之,我的代码类似于以下内容:
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)的实现包含了针对这种插入的保护,因为如果它需要重新分配,它将会复制我的元素。 但是,我不确定我是否能够依靠这种行为,还是需要我自己先制作一份副本? (我宁愿防止自己在升级到新的STL实现时查看这种错误)
所以简而言之:我允许在引用同一个向量中的元素的矢量上调用insert()吗?
你很好。
如果你看一下表99(序列容器需求),你会看到,例如, a.insert(p,i,j)
(其中i
和j
是迭代器)具有先决条件:“i和j不是迭代器变成“。
但是调用a.insert(p,n,t)
,其中n
是一个count并且t
是一个值,没有这样的要求。
这被明确提出作为一个问题在C + + 11天后,它被关闭为NAD与理由“ vector::insert(iter, value)
需要工作,因为标准没有给它的权限不上班。”
上一篇: Inserting in vector with reference to data of the same vector
下一篇: how to handle this?