C ++ push_back 2D向量中的许多1D向量

问题描述

假设我有很多向量:


vector<int> v1 = ...
vector<int> v2 = ...
...
vector<int> v1000 = ...

是否有比这更快速方法来用这些1D向量填充2D向量:

vector<vector<int>> vGlobal ;
vGlobal.push_back(v1);
vGlobal.push_back(v2);
.......
VGlobal.push_back(v1000);

解决方法

这样做会更快

  • 先预留1000个插槽,然后
  • 然后将向量移动到vGlobal中(不再需要v1v1000;如果在此过程完成后仍需要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个实例,而不要使用v1v2,..., v1000

,

假设我有很多向量:

vector<int> v1 = ...
vector<int> v2 = ...
...
vector<int> v1000 = ...

让我们假设您不必单独管理和命名它们,而可以将v1写入v1000而不是v[0]v[999]循环处理所有这些内容?

有标准的解决方案:

  1. 如果这些向量具有固定数目:
    std::array<std::vector<int>,1000> v;
    
  2. 如果您想在运行时添加/删除矢量:
    std::vector<std::vector<int>> v(1000);
    

现在,如果您出于某种原因想使用vGlobal中所有向量的副本创建v

std::vector<std::vector<int>> vGlobal(v.begin(),v.end());