【问题标题】:Constant Time Swap Logic for Vectors in C++ STLC++ STL 中向量的恒定时间交换逻辑
【发布时间】:2014-10-06 15:00:42
【问题描述】:

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

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

【问题讨论】:

  • 因为它们交换了指向基础数据的指针......(和计数/容量变量)

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


【解决方案1】:

一个典型的向量实现存储:

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

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

【讨论】:

    猜你喜欢
    • 2013-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-10
    • 2021-06-20
    相关资源
    最近更新 更多