vector swap clear erase 区别
时间: 2023-09-22 22:13:48 浏览: 100
在使用vector容器时,有几个方法可以用来清除元素和释放内存,它们分别是swap、clear和erase。
swap方法是一种直接将容器与另一个容器进行交换的方法,通过交换容器的内部指针和大小等信息来实现清空容器并释放内存的效果。使用swap方法可以快速清空容器并释放内存,因为它直接释放了容器占用的内存空间。例如,可以使用vector<T>().swap(vec)来清空vec容器并释放内存。
clear方法是一种清除容器内所有元素的方法,但它不会释放容器所占用的内存空间。它只是将容器的大小(size)设置为0,从而清除了所有元素,但保留了容器的容量(capacity)。因此,使用clear方法后,容器仍然占用着一定的内存空间,下次添加元素时不需要重新分配内存。
erase方法是一种清除容器中指定范围内元素的方法,并可以选择是否释放内存。通过指定要删除的元素的起始位置和结束位置,可以删除容器中的一部分元素。当删除所有元素时,可以选择是否释放容器占用的内存空间。如果选择释放内存,可以使用vector<T>(vec).swap(vec)来清空容器并释放内存。
总结起来,swap方法可以清空容器并释放内存,clear方法只清除元素但不释放内存,而erase方法可以选择性地清除元素并选择是否释放内存。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
相关问题
STL vector
向量vector是STL模板中的动态数组,可以在运行时动态地增加或减少元素。以下是向量vector的常见操作:
1. 创建向量:可以使用默认构造函数创建一个空的向量,也可以使用带有初始元素个数和初始值的构造函数创建一个向量。
2. 插入元素:可以使用push_back()函数在向量的末尾插入一个元素,也可以使用insert()函数在指定位置插入一个元素。
3. 删除元素:可以使用pop_back()函数删除向量的末尾元素,也可以使用erase()函数删除指定位置的元素。
4. 访问元素:可以使用下标运算符[]或at()函数访问向量中的元素。
5. 修改元素:可以使用下标运算符[]或at()函数修改向量中的元素。
6. 获取向量大小:可以使用size()函数获取向量中元素的个数。
7. 清空向量:可以使用clear()函数清空向量中的所有元素。
8. 判断向量是否为空:可以使用empty()函数判断向量是否为空。
9. 复制向量:可以使用赋值运算符=或assign()函数将一个向量复制给另一个向量。
10. 交换向量:可以使用swap()函数交换两个向量的元素。
vector怎么清空
要清空一个vector,可以使用以下几种方法:
1. 使用clear()函数:调用vector的clear()函数可以清空所有元素,但不会回收内存。例如,vec.clear()可以清空vector vec中的所有元素。
2. 使用erase()函数循环删除:可以使用erase()函数循环删除vector中的元素。通过迭代器遍历vector,然后使用erase()函数删除元素。需要注意的是,在使用erase()函数时,要注意迭代器的更新。例如,可以使用以下代码循环删除vector vec中的所有元素:
```cpp
vector<int>::iterator it;
for (it = vec.begin(); it != vec.end(); ) {
it = vec.erase(it);
}
```
3. 使用swap()函数:可以使用swap()函数来清空vector并回收内存。有两种写法可以实现这个目的。一种是使用临时vector与原vector交换,例如:
```cpp
vector<int>().swap(vec);
```
另一种是直接使用swap()函数,例如:
```cpp
vec.swap(vector<int>());
```
以上是清空vector的几种常见方法。根据具体情况选择合适的方法来清空vector。
#### 引用[.reference_title]
- *1* [【C/C++笔记】之vector清除元素和空间的三种方法](https://blog.csdn.net/qq_35097289/article/details/104902763)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* [C++ Vector 清空元素的方法](https://blog.csdn.net/qq_51101876/article/details/119494858)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
阅读全文