哪个C ++对象复制得更快?

时间:2011-09-17 22:53:33

标签: c++ performance stdvector

存在此C ++对象的两个实例。

my_type
{
    public:
        std::vector<unsigned short> a;
}

std :: vector为空,另一个包含50个元素。

哪个实例最快复制或者同时复制?

1 个答案:

答案 0 :(得分:10)

复制std::vector时,所有元素也会被复制 - 因此所用时间应与vector.size()成比例。

c++0x中引入了所谓的 move 语义,允许为类型定义移动构造函数和移动赋值运算符。这些为标准库容器(例如std::vector)定义的,并且应该允许在O(1)时间内移动向量。如果您担心性能,也许您可​​以重新投射操作以使用这些新功能。

编辑:根据链接的问题,如果您担心在致电vector::push_back时可能会执行额外的副本,您可以选择以下几个选项:

  1. c++0x中使用新的vector::emplace_back。这允许您的对象在容器中就地构建。
  2. c++0x中使用移动语义,通过类似vector.push_back(std::move(object_to_push))的内容。对于POD类型,这仍然会比emplace_back选项进行更多复制。
  3. 存储指向对象的容器而不是对象本身。在这种情况下,容器将唯一复制的是指针本身 - 这很便宜。您可能希望使用此选项的某些智能指针变体。
  4. 希望这有帮助。