例如:
v1 = {1,2,3}, v2 = {4,5};
swap(v1, v2);
现在v1 = {4,5}
,v2 = {1,2,3}
我认为它应该非常快,不考虑这两个向量的长度吗?它只是交换指针?
答案 0 :(得分:10)
我认为它应该非常快,不考虑这两个向量的长度吗?
是。 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::swap和std::swap(std::vector)
将容器的内容与其他容器的内容进行交换。才不是 调用对单个元素的任何移动,复制或交换操作。 所有迭代器和引用仍然有效。过去的迭代器无效。
复杂性: 恒定。
它只是交换指针?
基本上,它取决于您正在使用的STL的实现,但它是实现它的最常用方法。