vector swap clear erase 区别
时间: 2023-09-22 21:13:48 浏览: 154
在使用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>
相关问题
vector
### C++中 `vector` 数据结构的使用方法
`vector` 是 C++ 标准模板库(STL)中的一个动态数组容器,提供了类似数组的操作,同时具有动态扩展和收缩的能力。以下是关于 `vector` 的构造、常用操作及函数的详细介绍[^1]。
#### 1. 构造函数
`vector` 提供了多种构造方式:
- 默认构造:`vector<int> v;` 创建一个空的 `vector`。
- 区间构造:`vector(v.begin(), v.end());` 将另一个 `vector` 的部分或全部元素拷贝到新容器中[^1]。
- 指定大小和初始值:`vector<int> v(n, elem);` 创建包含 `n` 个值为 `elem` 的元素的 `vector`。
- 拷贝构造:`vector(const vector &vec);` 创建一个与现有 `vector` 完全相同的副本[^1]。
#### 2. 常用成员函数
以下是一些常用的 `vector` 成员函数:
- **访问元素**:
- `at(index)`:通过索引访问元素,超出范围会抛出异常[^2]。
- `operator[]`:直接通过下标访问元素,不检查范围。
- `front()` 和 `back()`:分别返回第一个和最后一个元素[^2]。
- **修改元素**:
- `push_back(elem)`:在末尾添加一个元素[^1]。
- `pop_back()`:移除末尾元素[^1]。
- `insert(position, elem)`:在指定位置插入一个或多个元素。
- `erase(position)` 或 `erase(start, end)`:删除指定位置的单个或多个元素[^2]。
- **容量相关**:
- `size()`:返回当前存储的元素个数[^1]。
- `capacity()`:返回当前分配的存储空间大小[^1]。
- `empty()`:判断是否为空。
- `resize(n)`:调整容器大小为 `n`,若新增加的元素将被初始化为默认值[^1]。
- **其他操作**:
- `clear()`:清空所有元素[^1]。
- `swap(vec)`:交换两个 `vector` 的内容。
#### 3. 示例代码
以下是一个简单的 `vector` 使用示例:
```cpp
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec; // 创建空 vector
vec.push_back(10); // 添加元素
vec.push_back(20);
// 访问元素
std::cout << "First element: " << vec[0] << std::endl;
std::cout << "Last element: " << vec.back() << std::endl;
// 修改元素
vec[0] = 100;
std::cout << "Modified first element: " << vec[0] << std::endl;
// 删除元素
vec.pop_back();
std::cout << "Size after pop_back: " << vec.size() << std::endl;
return 0;
}
```
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()函数交换两个向量的元素。
阅读全文
相关推荐
















