c++ - 参照同一 vector 的数据插入 vector

标签 c++ vector stl stdvector

我目前处于一种情况,我想复制 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 实现时阻止自己查看此类错误)

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

最佳答案

你很好。

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

但是调用 a.insert(p,n,t) 其中 n 是一个计数而 t 是一个值没有这样的调用要求。

这是在 C++11 时代明确提出的问题,它作为 NAD 关闭,理由是“vector::insert(iter, value) is required to work because标准不允许它不起作用。”

关于c++ - 参照同一 vector 的数据插入 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36403295/

相关文章:

pointers - vector <list <T >>是否保证元素地址保持不变?

c++ - 为什么在 STL 映射中用作值的类需要在...中有一个默认构造函数?

c++ - 找到数字的主要因素的更好方法

c++ - T 的模板特化 -> std::vector<T>

c++ - 在同一个 vector 中存储不同种类的枚举 - C++

c++ - 将字符串 vector 转换为自定义对象 vector

c++ - 通过调用 transform 方法对齐持有不同类型的两个容器

c++ - 在结束运行之前在 C++ 中获取 shell 命令输出

c++ - 如何更改 QGraphicsView 所选项目的颜色

r - 如何在 R 中生成整数和定义长度的随机向量?