交换两个整个向量/队列/堆栈时间成本?

时间:2015-07-07 05:27:48

标签: c++ c++11 vector stl

例如:

v1 = {1,2,3},    v2 = {4,5};
swap(v1, v2);

现在v1 = {4,5}v2 = {1,2,3}

我认为它应该非常快,不考虑这两个向量的长度吗?它只是交换指针?

1 个答案:

答案 0 :(得分:10)

  1.   

    我认为它应该非常快,不考虑这两个向量的长度吗?

  2. 是。 std::swap std::vector的复杂性保证是标准的恒定时间:

    23.3.6.3 $ 10,11 [vector.capacity](由我加粗):

      

    void swap(vector& x);
      效果:将*的内容和容量()与x的内容和容量交换   复杂性:恒定时间

    按$ 23.3.6.6 / 1 [vector.special],std::swap的{​​{1}}专门用作:

      

    std::vector
      template <class T, class Allocator>
      功效:
       void swap(vector<T,Allocator>& x, vector<T,Allocator>& y);

    以下是一些解释:std::vector::swapstd::swap(std::vector)

      

    将容器的内容与其他容器的内容进行交换。才不是   调用对单个元素的任何移动,复制或交换操作。   所有迭代器和引用仍然有效。过去的迭代器无效。

         

    复杂性:   恒定。

    1.   

      它只是交换指针?

    2. 基本上,它取决于您正在使用的STL的实现,但它是实现它的最常用方法。