C++标准模板库中的vector详解及使用示例
3星 · 超过75%的资源 需积分: 31 14 浏览量
更新于2024-09-12
1
收藏 43KB DOC 举报
"C++中的vector类"
C++中的`vector`类是标准模板库(STL)中的一个重要组件,它提供了一种动态数组的功能,允许在程序运行时改变数组的大小。`vector`不仅可以存储基本类型如`int`,还可以存储自定义的类对象,使其在各种场景下具有很高的灵活性。
### 1. `vector`的基本用法
- **创建与初始化**:创建一个`vector`可以指定元素类型和初始容量,如`vector<int> vecMyHouse(100)`,这会创建一个能容纳100个`int`的`vector`。另外,可以指定初始值,如`vector<int> vecMyHouse(100, 0)`,所有元素被初始化为0。
- **元素访问**:`vector`支持通过下标访问元素,如`vecMyHouse[50]`获取或设置第50个元素。
- **添加元素**:使用`push_back()`函数可以向`vector`末尾添加元素,如`vecMyHouse.push_back(1)`。
- **改变大小**:`resize()`函数可以调整`vector`的大小,如`vecMyHouse.resize(400)`,增加或减少容量,并根据需要对新元素进行默认初始化或删除超出部分的元素。
- **存储自定义类型**:`vector`可以存储任何类型的对象,只要满足复制和赋值的要求,例如`vector<Cmyclass> vecMyHouse`。
### 2. `vector`的头文件与命名空间
在使用`vector`之前,需要包含`#include <vector>`。由于`vector`属于`std`命名空间,可以通过以下方式引入:
- 使用`using std::vector;`,仅引入`vector`。
- 使用`using namespace std;`,引入整个`std`命名空间。
- 直接在每个使用`vector`的地方前加上`std::`,如`std::vector<int> myHouse;`。
### 3. `vector`的主要成员函数
- **构造函数**:除了上面提到的初始化,还有其他构造方式,如`vector(int n, const T& value)`用于初始化n个值为value的元素。
- **size()**:返回`vector`当前的元素数量。
- **empty()**:检查`vector`是否为空。
- **begin() & end()**:返回迭代器,分别指向第一个元素和超过最后一个元素的位置,用于遍历`vector`。
- **front() & back()**:返回第一个和最后一个元素的引用。
- **insert()**:在指定位置插入元素或一系列元素。
- **erase()**:删除指定位置的元素或范围内的元素。
- **clear()**:清空`vector`的所有元素。
- **reserve()**:预留内存,不改变元素数量,但可以避免因元素增多导致的频繁内存重分配。
- **capacity()**:返回`vector`当前已预留的内存大小。
- **operator[]**:下标访问元素,与`at()`类似但不进行边界检查。
### 4. `vector`的迭代器
迭代器是STL的重要概念,它类似于指针,可以用来遍历`vector`中的元素。例如,可以使用`for`循环和迭代器来遍历`vector`:
```cpp
for(vector<int>::iterator it = vecMyHouse.begin(); it != vecMyHouse.end(); ++it) {
// 使用*it访问元素
}
```
或者使用C++11的范围基础循环:
```cpp
for(int elem : vecMyHouse) {
// 使用elem访问元素
}
```
### 5. 效率与内存管理
`vector`在添加元素时,如果容量不足,会自动扩大其容量,通常按一定比例(如1.5倍)增长。这种策略减少了频繁的内存分配,但也可能引入额外的性能开销。如果预先知道`vector`的大致大小,可以使用`reserve()`来减少不必要的内存分配。
### 6. `vector`与其他容器的比较
- **与数组的区别**:`vector`比数组更灵活,可以动态改变大小,但访问速度略慢于固定大小的数组。
- **与`deque`的区别**:`deque`提供了更快的两端插入和删除速度,但在内存连续性上不如`vector`。
- **与`list`的区别**:`list`由节点组成,插入和删除效率高,但查找元素速度慢,适合频繁插入和删除的情况。
`vector`是C++中非常实用的容器,它结合了数组和链表的优点,适用于需要高效随机访问且可能需要动态增减元素的场景。理解并熟练使用`vector`,是提升C++编程能力的重要一步。
2020-12-25 上传
2023-05-22 上传
2023-06-12 上传
2023-09-24 上传
136 浏览量
2023-09-11 上传
2023-08-15 上传
2023-07-29 上传
yangqieei
- 粉丝: 0
- 资源: 10