std :: copy和容器的复制构造函数之间是否存在性能差异?

时间:2014-11-04 19:02:53

标签: c++ stl containers copy-constructor c++-standard-library

std::copy是一种更通用的方法,因为它可以处理具有不同值类型的容器(例如,从std::vector<float>复制到std::vector::<double>)。但是当两个容器的值类型相同时,我是否使用复制构造函数而不是std::copy是否重要?

2 个答案:

答案 0 :(得分:16)

不要担心表现,他们都应该非常接近。代替:

  • 如果您要创建一个副本的新容器,请使用复制构造函数或双迭代器构造函数(如果是不同的元素类型)。
  • 如果您要替换(分配)现有容器,请使用相应的分配运算符 assign成员。
  • 如果您要替换元素子集,请使用std::copy

通过准确地表示您尝试做的事情,您可以为编译器提供最可能的信息来优化其代码(例如,直接从现有容器构建它可以预先分配正确的内存)。

答案 1 :(得分:1)

一个潜在的重要区别是当你有一种情况,你可以调用移动构造函数而不是复制构造函数(例如,当你复制构造的对象是一个rvalue,比如函数的返回值) 。如果您遇到这种情况,您肯定希望通过移动构建或移动分配而不是使用std :: copy来确保利用它。

基本上这只是遵循马克B建议的另一个原因。