相关疑难解决方法(0)

连接两个向量的最佳方法是什么?

我正在使用多线程并想要合并结果.例如:

std::vector<int> A;
std::vector<int> B;
std::vector<int> AB;
Run Code Online (Sandbox Code Playgroud)

我希望AB按顺序拥有A的内容和B的内容.做这样的事情最有效的方法是什么?

c++ vector

173
推荐指数
5
解决办法
18万
查看次数

在转换一个向量的元素的同时连接两个向量的最佳方法是什么?

假设我有

std::vector<T1> vec1 {/* filled with T1's */};
std::vector<T2> vec2 {/* filled with T2's */};
Run Code Online (Sandbox Code Playgroud)

以及一些T1 f(T2)当然可以成为lambda的功能.连接vec1vec2应用于f每个T2中的最佳方法是什么vec2

显而易见的解决方案是std::transform,即

vec1.reserve(vec1.size() + vec2.size());
std::transform(vec2.begin(), vec2.end(), std::back_inserter(vec1), f);
Run Code Online (Sandbox Code Playgroud)

但我说这不是最佳的,因为std::back_inserter必须对每个插入的元素进行不必要的容量检查.什么是最优的是类似的东西

vec1.insert(vec1.end(), vec2.begin(), vec2.end(), f);
Run Code Online (Sandbox Code Playgroud)

这可能会导致单一容量检查.遗憾的是,这不是有效的C++.本质上,这是一样的道理,为什么std::vector::insert是最佳的载体串联,看到这个问题,并在评论对于在这一点上进一步讨论的问题.

所以:

  1. std::transform使用STL的最佳方法是什么?
  2. 如果是这样,我们可以做得更好吗?
  3. 是否有充分的理由insert将上述功能排除在STL之外?

UPDATE

我已经开始验证多个容量检查是否确实有任何明显的成本.为此,我基本上只将id函数(f(x) = x)传递给答案中讨论的std::transformpush_back方法.完整的代码是:

#include <iostream>
#include <vector>
#include …
Run Code Online (Sandbox Code Playgroud)

c++ stl vector

7
推荐指数
1
解决办法
566
查看次数

标签 统计

c++ ×2

vector ×2

stl ×1