2011-09-17 34 views
-1

存在这个C++对象的两个实例。哪个C++对象更快地复制?

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

其中std :: vector为空而另一个包含50个元素的地方。

哪个实例复制速度最快或者它们在同一时间复制?

+0

我在澄清中进行了编辑。 – alan2here

+0

我甚至无法想象为什么这个问题的答案不应该很明显。 – Jon

+0

试图打破这种问题得到一个体面的答案http://stackoverflow.com/questions/7457747/before-or-after-when-adding-to-sets-in-c/7457955#7457955 – alan2here

回答

10

std::vector被复制时,它的所有元素也被复制 - 所花费的时间应与vector.size()成比例。

c++0x所谓的移动引入了语义,允许为类型定义移动构造函数和移动赋值运算符。这些是为标准库容器(例如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. 存储指向对象的指针容器而不是对象本身。在这种情况下,容器复制的唯一东西就是指针本身 - 这很便宜。您可能希望使用此选项的某些智能指针变体。

希望这会有所帮助。

+0

是的,它能让人耳目一新,看到一个好的,直接的答案,甚至更快地看到一个答案:¬) – alan2here