#D4. STL-vector笔记
STL-vector笔记
当前没有测试数据。
1. vector(动态数组,最常用)
用途:替代普通数组,支持动态扩容,随机访问速度快,适合需要频繁读写、少中间插入删除的场景。
核心定义方式
vector的定义需指定元素类型,常见方式如下:
| 定义方式 | 说明 | 示例 |
|---|---|---|
| 默认构造 | 创建空的vector,初始大小为0 | vector<int> v; |
| 指定大小 | 创建含n个元素的vector,默认初始值为0 | vector<int> v(5); |
| 指定大小+初始值 | 创建含n个元素的vector,初始值均为val | vector<int> v(5, 3); |
| 拷贝构造 | 用已有的vector创建新vector | vector<int> v1(5); vector<int> v2(v1); |
| 列表初始化 | 用初始化列表直接赋值(C++11及以上) | vector<int> v = {1,2,3}; |
vector常用函数
| 函数名 | 功能说明 | 示例 |
|---|---|---|
| push_back(x) ★ | 在容器末尾添加元素x,自动扩容 | v.push_back(5); |
| size() ★ | 返回容器中元素的个数(无符号整数,建议用int接收) | int len = v.size(); |
| empty() ★ | 判断容器是否为空,返回bool值(true为空) | if (v.empty()) { ... } |
| clear() ★ | 清空容器中所有元素(size变为0,容量不变) | v.clear(); |
| erase(it) ★ | 删除迭代器it指向的元素,返回下一个元素的迭代器 | auto it = v.begin(); v.erase(it); |
| resize(n, val) | 将容器大小调整为n,新增元素值为val(默认0) | v.resize(5, 0); // 调整为5个元素,值都是0 |
| operator[] ★ | 像普通数组一样访问元素(下标从0开始) | int x = v[2]; |
使用下标时需注意:
vector用下标访问的核心要求是访问的下标在有效范围内(0 ≤ 下标 < 元素个数),具体分两种场景:
- 提前指定初始个数(如
vector<int> v(5)):
初始就有5个元素(默认值0),可直接用v[0]到v[4]访问,下标合法则不报错。 - 未提前指定初始个数(如
vector<int> v):
初始为空(size=0),直接用v[0]会报错;但通过push_back(x)添加元素后,可访问已添加元素的下标(如添加3个元素后,可访问v[0]-v[2])。
关键提醒:vector下标访问不做越界检查(越界会崩溃),若不确定下标合法性,建议用at()函数(越界会抛异常),或先通过size()判断。
vector的3种遍历方式
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v = {1, 2, 3, 4, 5}; // 初始化vector
// 1. 基于范围的for循环(C++11及以上)
cout << "基于范围的for循环:";
for (int num : v) {
cout << num << " ";
}
cout << endl;
// 2. 原始迭代器写法
cout << "原始迭代器写法:";
for (vector<int>::iterator it = v.begin(); it != v.end(); ++it) {
cout << *it << " ";
}
cout << endl;
// 3. auto的迭代器写法(C++11及以上)
cout << "auto的迭代器写法:";
for (auto it = v.begin(); it != v.end(); ++it) {
cout << *it << " ";
}
cout << endl;
return 0;
}
相关
在以下作业中: