C ++ STL中向量的恒定时间交换逻辑

时间:2014-10-06 15:00:42

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

为什么交换两个C ++ STL向量的内容所需的时间复杂度与相应向量的大小无关?

参考:http://www.cplusplus.com/reference/vector/vector/swap/

1 个答案:

答案 0 :(得分:9)

典型的矢量实现存储:

  • 分配器
  • 指向第一个元素的指针
  • 指向过去位置的指针,或等效的大小
  • 指向向量所拥有的内存块末尾的指针,或等效的容量

swap()只是交换指针,如果allocator_traits<allocator_type>::propagate_on_container_swap::value为真,则为分配器。它没有按元素交换。实际上,除std::array之外的任何标准容器都不允许进行逐元素交换。