swap vector
时间: 2023-10-23 16:12:25 浏览: 128
在C++中,swap函数可以用来交换两个vector容器的内容。使用swap函数,可以确保在常量时间内完成交换操作,而且不会删除或插入任何元素,也不会导致迭代器失效。需要注意的是,要交换的两个容器的类型必须匹配,而且所存储的元素类型也必须相同。调用swap函数后,右操作数原来存储的元素会被存放在左操作数中,反之亦然。例如,可以使用以下代码进行vector的交换操作:
vector<int> v1;
v1.push_back(10);
v1.push_back(20);
vector<int> v2;
v2.push_back(30);
v1.swap(v2);
在执行完swap操作后,容器v1中会存储原来在v2中的元素,而v2则会存储原来在v1中的元素。通过使用swap函数,可以简单快捷地交换vector容器中的元素。
相关问题
swap清空vector
可以使用以下代码来清空vector并释放内存:
```
std::vector<T>().swap(v);
```
其中,T是vector中存储的数据类型,v是需要清空的vector对象。该代码会创建一个临时的空vector,然后和原vector进行swap操作,将原vector的内容移动到临时vector中,最后临时vector被销毁时会自动释放内存。这种方法可以有效地清空vector并避免内存泄漏。
swap:vector
### C++ STL `swap` 和 `vector` 用法实例
#### 使用 `std::swap` 进行两个向量交换
当需要高效地交换两个容器的内容而不创建额外副本时,可以使用 `std::swap` 函数。下面是一个具体的例子:
```cpp
#include <iostream>
#include <string>
#include <vector>
int main() {
std::vector<std::string> vec1 = {"a", "b", "c"};
std::vector<std::string> vec2 = {"d", "e", "f"};
// 调用标准库中的 swap 方法来交换这两个向量的数据成员
std::swap(vec1, vec2);
// 输出交换后的第一个向量内容
for (const auto& s : vec1) {
std::cout << s << ' ';
}
std::cout << std::endl;
// 输出交换后的第二个向量内容
for (const auto& s : vec2) {
std::cout << s << ' ';
}
std::cout << std::endl;
return 0;
}
```
这段代码展示了如何利用 `std::swap` 来快速有效地互换两个 `std::vector` 对象内部存储的实际数据[^1]。
#### 关于容量与大小的概念说明
值得注意的是,在执行上述操作之后,尽管两者的元素被成功交换了,但是各自的分配器以及动态数组的底层缓冲区也会随之改变。这意味着如果原先某个向量有更大的预留空间(即更高的 capacity),那么在调用了 `swap` 后该特性会转移到另一个向量上[^3]。
例如,假设有一个新的空向量 `vNew` 并且其初始容量为默认值;而现有非空向量 `v` 已经拥有了较多预分配的空间。通过 `vNew.swap(v)` 可以让新向量获得旧向量的所有资源,包括已有的容量,这有助于减少后续插入操作所需的重新分配次数并提升效率。
阅读全文
相关推荐















