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 中向量的恒定时间交换逻辑的主要内容,如果未能解决你的问题,请参考以下文章

在恒定时间内修剪 C++ 字符串

C++:问题向量 STL

在 C++ 中的向量中查找() stl

如何在 WebAssembly 中使用(C++ STL 的)向量

在向量 STL C++ 中查找项目

寻找类似 C++ STL 的向量类但使用堆栈存储