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

2022-01-07 00:00:00 复制 c++ stl

我有两个向量:

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.

相关文章