参照同一向量的数据插入向量
Inserting in vector with reference to data of the same vector
我目前处于一种情况,我想复制向量中的一些元素。简而言之,我的代码类似于以下内容:
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() 吗?
你很好。
如果你查看 table 99(序列容器要求),你会看到,例如,a.insert(p,i,j)
(其中 i
和 j
是迭代器) 有前提条件:"i and j are not iterators into a".
但是 a.insert(p,n,t)
调用 n
是一个计数,t
是一个值没有这样的要求。
这是在 C++11 时代明确提出的一个问题,它作为 NAD 关闭,理由是“vector::insert(iter, value)
需要工作,因为标准没有给予它许可不工作。"
我目前处于一种情况,我想复制向量中的一些元素。简而言之,我的代码类似于以下内容:
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() 吗?
你很好。
如果你查看 table 99(序列容器要求),你会看到,例如,a.insert(p,i,j)
(其中 i
和 j
是迭代器) 有前提条件:"i and j are not iterators into a".
但是 a.insert(p,n,t)
调用 n
是一个计数,t
是一个值没有这样的要求。
这是在 C++11 时代明确提出的一个问题,它作为 NAD 关闭,理由是“vector::insert(iter, value)
需要工作,因为标准没有给予它许可不工作。"