【发布时间】:2020-12-10 15:47:47
【问题描述】:
引发这个问题的是以下代码:
std::vector<int> x(500);
std::vector<int> y;
std::swap(x,y);
我想知道交换两者是否需要两倍于 x 所需的内存量。
在cppreference 上我找到了std::vector::swap(这是最后一行有效调用的方法):
将容器的内容与其他容器的内容交换。不对单个元素调用任何移动、复制或交换操作。
所有迭代器和引用仍然有效。过去的迭代器无效。
现在我比以前更困惑了。当std::vector::swap 不移动、复制或交换元素时,它实际上做了什么?
迭代器如何保持有效?
这是否意味着这样的代码是有效的?
std::vector<int> x(500);
std::vector<int> y;
auto it = x.begin();
std::swap(x,y);
std::sort(it , y.end()); // iterators from different containers !!
【问题讨论】: