【问题标题】:C++ push_back many 1D vectors in a 2D vector [duplicate]C ++ push_back 2D向量中的许多1D向量[重复]
【发布时间】:2020-10-14 08:53:14
【问题描述】:

假设我有很多向量:


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);

【问题讨论】:

  • 是的,它被称为“循环”,一种允许您多次重复一段代码的编程结构。
  • @RinatVeliakhmedov 循环并不快。
  • 你可以使用std::vector&lt;std::vector&lt;int&gt;&gt; vGlobal{v1, v2, v3};,但是为什么你有很多单独的向量可以开始?为什么不onlyvGlobal 和索引? vGlobal[0] 等等...?
  • @VladfromMoscow 这肯定比写 1000 回推要快。
  • @RinatVeliakhmedov “是的,它被称为循环”。不知道这是否讽刺,但我想它是......那么你会迭代什么?我很好奇你的回复,请展示你的技能

标签: c++ arrays vector has-many push-back


【解决方案1】:

这样会更快

  • 先预留 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&lt;std::vector&lt;int&gt;&gt; 来保存所有 1000 个实例,而不是使用 v1v2、...、v1000

【讨论】:

    【解决方案2】:

    假设我有很多向量:

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

    让我们假设您不必单独管理和命名它们,而不是 v1v1000 您可以写 v[0]v[999] 这样可以很容易地在循环中处理所有它们等?

    对此有标准解决方案:

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-28
      • 2020-02-02
      • 2016-11-16
      相关资源
      最近更新 更多