C++ STL 中向量的恒定时间交换逻辑
Posted
技术标签:
【中文标题】C++ STL 中向量的恒定时间交换逻辑【英文标题】:Constant Time Swap Logic for Vectors in C++ STL 【发布时间】:2014-10-06 15:00:42 【问题描述】:为什么交换两个 C++ STL 向量的内容所需的时间复杂度与对应向量的大小无关?
参考:http://www.cplusplus.com/reference/vector/vector/swap/
【问题讨论】:
因为它们交换了指向基础数据的指针......(和计数/容量变量) 【参考方案1】:一个典型的向量实现存储:
分配器 指向第一个元素的指针 指向过去位置的指针,或等效的大小 指向向量所拥有的内存块末尾的指针,或等效的容量swap()
只是交换指针,如果 allocator_traits<allocator_type>::propagate_on_container_swap::value
为真,则交换分配器。它不进行元素交换。事实上,除std::array
之外的任何标准容器都不允许进行元素交换。
【讨论】:
以上是关于C++ STL 中向量的恒定时间交换逻辑的主要内容,如果未能解决你的问题,请参考以下文章