问题描述
假设我有很多向量:
vector<int> v1 = ...
vector<int> v2 = ...
...
vector<int> v1000 = ...
vector<vector<int>> vGlobal ;
vGlobal.push_back(v1);
vGlobal.push_back(v2);
.......
VGlobal.push_back(v1000);
解决方法
这样做会更快
- 先预留1000个插槽,然后
- 然后将向量移动到
vGlobal
中(不再需要v1
到v1000
;如果在此过程完成后仍需要v1
保持“完整”不使用std::move
)
如果您无法更改结构。
vector<vector<int>> vGlobal;
vGlobal.reserve(1000);
vGlobal.push_back(std::move(v1));
vGlobal.push_back(std::move(v2));
...
VGlobal.push_back(std::move(v1000));
如果您可以更改结构,那么我建议首先使用std::vector<std::vector<int>>
来容纳所有1000个实例,而不要使用v1
,v2
,..., v1000
。
假设我有很多向量:
vector<int> v1 = ... vector<int> v2 = ... ... vector<int> v1000 = ...
让我们假设您不必单独管理和命名它们,而可以将v1
写入v1000
而不是v[0]
到v[999]
循环处理所有这些内容?
有标准的解决方案:
- 如果这些向量具有固定数目:
std::array<std::vector<int>,1000> v;
- 如果您想在运行时添加/删除矢量:
std::vector<std::vector<int>> v(1000);
现在,如果您出于某种原因想使用vGlobal
中所有向量的副本创建v
:
std::vector<std::vector<int>> vGlobal(v.begin(),v.end());