swap清空vector
时间: 2023-07-23 16:34:28 浏览: 124
可以使用以下代码来清空vector并释放内存:
```
std::vector<T>().swap(v);
```
其中,T是vector中存储的数据类型,v是需要清空的vector对象。该代码会创建一个临时的空vector,然后和原vector进行swap操作,将原vector的内容移动到临时vector中,最后临时vector被销毁时会自动释放内存。这种方法可以有效地清空vector并避免内存泄漏。
相关问题
清空vector数组
### 使用 `clear()` 方法清空 vector 数组
在 C++ 中,清空一个 `std::vector` 数组最直接的方式是使用其成员函数 `clear()`。该方法会移除容器中所有的元素,并将容器的大小设置为 0,但不会释放底层内存空间[^3]。
```cpp
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
// 清空 vector 中的所有元素
vec.clear();
std::cout << "Vector 是否为空: " << (vec.empty() ? "是" : "否") << std::endl;
return 0;
}
```
执行上述代码后,输出结果将是:
```
Vector 是否为空: 是
```
### 释放内存:结合使用 `clear()` 和 `shrink_to_fit()`
如果希望不仅清空内容,还希望释放 `vector` 占用的内存空间,可以调用 `shrink_to_fit()` 方法。此方法请求容器减少其容量以匹配其大小,从而可能释放多余的内存资源[^3]。
```cpp
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
// 清空元素并尝试释放内存
vec.clear();
vec.shrink_to_fit();
std::cout << "Vector 容量: " << vec.capacity() << std::endl;
return 0;
}
```
执行上述代码后,输出结果可能是:
```
Vector 容量: 0
```
具体输出取决于编译器实现,但 `capacity()` 的值应尽可能接近于 `size()` 的值,即 0。
### 注意事项
- 调用 `clear()` 不会影响 `vector` 的容量(capacity),即底层内存仍然保留。
- 如果需要完全释放内存,除了调用 `shrink_to_fit()` 外,还可以考虑使用交换技巧(swap trick)来强制释放内存。
```cpp
std::vector<int>(vec).swap(vec);
```
此操作创建了一个临时 `vector` 并与原 `vector` 进行交换,使原 `vector` 的容量归零。
---
C++清空vector并回收内存
可以使用以下代码清空vector并回收内存:
```
vector<int>().swap(v);
```
这会新建一个临时的vector对象,并将其与原vector对象v交换,使原来的v中的元素被清空并释放内存,临时对象被销毁。这种方法比使用v.clear()更好,因为它可以确保内存被及时释放。
阅读全文
相关推荐
















