【问题标题】:Is slicing a vector faster than copying each element into a new vector?切片向量是否比将每个元素复制到新向量中更快?
【发布时间】:2020-12-20 19:10:38
【问题描述】:

假设我有一个 10 个整数的向量,我想为 5 个元素中的每一个创建 2 个子向量。

如果我像这样对向量进行切片会更快吗:

vector<int> vec({0,1,2,3,4,5,6,7,8,9});
auto x = vec.begin();
vector<int> vec2(x, x+5);
x += 5;
vector<int> vec3(x, x+5);

与此相反?

vector<int> vec({0,1,2,3,4,5,6,7,8,9});
vector<int> vec2;
for (int i = 0; i < 5; i++) {
    vec2.push_back(vec[i]);
}
vector<int> vec3;
for (int i = 5; i < 10; i++) {
    vec3.push_back(vec[i]);
}

【问题讨论】:

  • 请贴出真实代码。 std::vector 没有 push 函数,for 循环条件缺失/不正确。
  • 已修复,抱歉
  • 这与询问i++++i 一样是对优化的误解。您测量过性能问题吗?

标签: c++ optimization vector


【解决方案1】:

第一种方式会更快,因为第一种方式std::vector 将在第一次构造中分配所有需要的内存,但第二种方式std::vector&lt;T&gt;::push_back 需要分配内存并增加底层数组大小,这很痛苦。

这是一个小基准:https://quick-bench.com/q/dXoWJhTzYDgNnIPFj-vla4pZ_PU

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-07
  • 1970-01-01
  • 1970-01-01
  • 2012-09-06
相关资源
最近更新 更多