复制 std::vector:更喜欢赋值还是 std::copy?

2024-05-11C/C++开发问题
4

本文介绍了复制 std::vector:更喜欢赋值还是 std::copy?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我有两个向量:

std::vector<int> v1, v2;

// Filling v1
...

现在我需要将 v1 复制到 v2.有什么理由更喜欢

And now I need to copy v1 to v2. Is there any reason to prefer

v2 = v1;

std::copy (v1.begin(), v1.end(), v2.begin());

(反之亦然)?

推荐答案

一般来说我更喜欢 v2 = v1:

  1. 它更短,使意图更清晰
  2. 如果 v2v1 的长度不同,
  3. std::copy 将不起作用(它不会调整它的大小),所以它会在最好的情况下保留一些旧元素(v2.size() > v1.size() 并覆盖程序最坏情况下其他地方使用的一些随机数据
  4. 如果 v1 即将过期(并且您使用 C++11),您可以轻松修改它以移动 内容
  5. 性能分配不太可能比 std::copy 慢,因为实施者可能会在内部使用 std::copy,如果它能带来性能优势.
  1. It is shorter and makes the intent more clear
  2. std::copy won't work if v2 doesn't have the same length as v1 (it won't resize it, so it will retain some of the old elements best case (v2.size() > v1.size() and overwrite some random data used elsewhere in the program worst case
  3. If v1 is about to expire (and you use C++11) you can easily modify it to move the contents
  4. Performancewise assignment is unlikely to be slower then std::copy, since the implementers would probably use std::copy internally, if it gave a performance benefit.

总而言之,std::copy 的表现力较差,可能会做错事,甚至更快.所以真的没有任何理由在这里使用它.

In conclusion, std::copy is less expressive, might do the wrong thing and isn't even faster. So there isn't really any reason to use it here.

这篇关于复制 std::vector:更喜欢赋值还是 std::copy?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

The End

相关推荐

无法访问 C++ std::set 中对象的非常量成员函数
Unable to access non-const member functions of objects in C++ std::set(无法访问 C++ std::set 中对象的非常量成员函数)...
2024-08-14 C/C++开发问题
17

从 lambda 构造 std::function 参数
Constructing std::function argument from lambda(从 lambda 构造 std::function 参数)...
2024-08-14 C/C++开发问题
25

STL BigInt 类实现
STL BigInt class implementation(STL BigInt 类实现)...
2024-08-14 C/C++开发问题
3

使用 std::atomic 和 std::condition_variable 同步不可靠
Sync is unreliable using std::atomic and std::condition_variable(使用 std::atomic 和 std::condition_variable 同步不可靠)...
2024-08-14 C/C++开发问题
17

在 STL 中将列表元素移动到末尾
Move list element to the end in STL(在 STL 中将列表元素移动到末尾)...
2024-08-14 C/C++开发问题
9

为什么禁止对存储在 STL 容器中的类重载 operator&amp;()?
Why is overloading operatoramp;() prohibited for classes stored in STL containers?(为什么禁止对存储在 STL 容器中的类重载 operatoramp;()?)...
2024-08-14 C/C++开发问题
6