223 lines
6.5 KiB
Markdown
223 lines
6.5 KiB
Markdown
以下是 C++ STL 中 `std::vector` 的**全面用法大全**(涵盖常用与高级功能,包含中英文注释,适合查阅与系统学习):
|
||
|
||
---
|
||
|
||
## 🔷 `std::vector` 概述
|
||
|
||
`std::vector` 是一个**动态数组容器**,支持快速的随机访问与末尾插入。
|
||
|
||
```cpp
|
||
#include <vector>
|
||
using namespace std;
|
||
|
||
vector<int> v; // 空 vector
|
||
vector<int> v(5); // 5 个元素,值为 0
|
||
vector<int> v(5, 10); // 5 个元素,值为 10
|
||
vector<int> v2 = {1, 2, 3}; // 列表初始化
|
||
vector<int> v3(v2); // 拷贝构造
|
||
```
|
||
|
||
---
|
||
|
||
## 🧰 常用成员函数分类一览
|
||
|
||
### ✅ 构造与初始化
|
||
|
||
```cpp
|
||
vector<int> v; // 默认构造
|
||
vector<int> v(10); // 10个默认值元素(int 默认是0)
|
||
vector<int> v(5, 3); // 5个3
|
||
vector<int> v2 = {1, 2, 3}; // 初始化列表
|
||
vector<int> v3(v2); // 拷贝构造
|
||
v.assign(4, 100); // 用4个100赋值
|
||
v.assign({1, 2, 3, 4}); // 用初始化列表赋值
|
||
```
|
||
|
||
---
|
||
|
||
### ✅ 容量相关
|
||
|
||
```cpp
|
||
v.size(); // 元素个数
|
||
v.capacity(); // 容量(预留空间)
|
||
v.max_size(); // 最大可容纳元素数
|
||
v.empty(); // 是否为空
|
||
v.resize(10); // 调整为10个元素,默认填0
|
||
v.resize(10, -1); // 用-1填充新元素
|
||
v.shrink_to_fit(); // 缩容至实际大小
|
||
v.reserve(100); // 提前分配至少100个容量
|
||
```
|
||
|
||
---
|
||
|
||
### ✅ 元素访问
|
||
|
||
```cpp
|
||
v[0]; // 下标访问
|
||
v.at(0); // 范围检查的访问,越界会抛异常
|
||
v.front(); // 第一个元素
|
||
v.back(); // 最后一个元素
|
||
v.data(); // 返回底层数组指针(T* 类型)
|
||
```
|
||
|
||
---
|
||
|
||
### ✅ 修改函数
|
||
|
||
```cpp
|
||
v.push_back(5); // 末尾添加
|
||
v.pop_back(); // 移除末尾元素
|
||
v.insert(v.begin(), 3); // 在开头插入3
|
||
v.insert(v.begin() + 2, 4, 9); // 在第3个位置插入4个9
|
||
v.insert(v.end(), {7, 8, 9}); // 插入初始化列表
|
||
v.erase(v.begin()); // 删除第一个
|
||
v.erase(v.begin(), v.begin()+3);// 删除前3个
|
||
v.clear(); // 清空所有元素
|
||
v.swap(v2); // 与另一个vector交换内容
|
||
```
|
||
|
||
---
|
||
|
||
### ✅ 迭代器相关
|
||
|
||
```cpp
|
||
vector<int>::iterator it = v.begin(); // 正向迭代器
|
||
vector<int>::iterator end = v.end();
|
||
|
||
vector<int>::reverse_iterator rit = v.rbegin(); // 反向迭代器
|
||
vector<int>::const_iterator cit = v.cbegin(); // 只读正向
|
||
vector<int>::const_reverse_iterator crit = v.crbegin(); // 只读反向
|
||
```
|
||
|
||
---
|
||
|
||
### ✅ 排序与查找(配合算法头 `<algorithm>`)
|
||
|
||
```cpp
|
||
#include <algorithm>
|
||
|
||
sort(v.begin(), v.end()); // 升序
|
||
sort(v.rbegin(), v.rend()); // 降序
|
||
reverse(v.begin(), v.end()); // 翻转
|
||
find(v.begin(), v.end(), 3); // 查找3
|
||
count(v.begin(), v.end(), 3); // 统计3出现次数
|
||
```
|
||
|
||
---
|
||
|
||
### ✅ 与其他容器函数通用的操作
|
||
|
||
```cpp
|
||
for (auto x : v) cout << x; // 范围for
|
||
for (auto it = v.begin(); it != v.end(); ++it)
|
||
cout << *it;
|
||
```
|
||
|
||
---
|
||
|
||
### ✅ C++11\~20 新特性支持
|
||
|
||
```cpp
|
||
v.emplace_back(10); // 直接构造末尾元素
|
||
v.emplace(v.begin(), 20); // 在指定位置构造
|
||
```
|
||
|
||
---
|
||
|
||
## 📝 常见用途小例子
|
||
|
||
### 1. 输入一串数字
|
||
|
||
```cpp
|
||
vector<int> v;
|
||
int x;
|
||
while (cin >> x) v.push_back(x);
|
||
```
|
||
|
||
### 2. 二维 vector
|
||
|
||
```cpp
|
||
vector<vector<int>> grid(5, vector<int>(10, 0)); // 5x10 矩阵
|
||
```
|
||
|
||
### 3. 排序 + 去重
|
||
|
||
```cpp
|
||
sort(v.begin(), v.end());
|
||
v.erase(unique(v.begin(), v.end()), v.end());
|
||
```
|
||
|
||
---
|
||
|
||
## 🧠 小总结
|
||
|
||
| 分类 | 函数举例 |
|
||
| ---------- | --------------------------------------------------- |
|
||
| 初始化 | `vector<int> v(10, 5)` |
|
||
| 容量操作 | `resize`, `reserve`, `shrink_to_fit` |
|
||
| 元素访问 | `[]`, `at`, `front`, `back`, `data` |
|
||
| 增删改 | `insert`, `erase`, `push_back`, `pop_back`, `clear` |
|
||
| 迭代器 | `begin`, `end`, `rbegin`, `cbegin`, `crend` |
|
||
| 算法配合 | `sort`, `find`, `reverse`, `unique` |
|
||
| C++11/14特性 | `emplace`, `auto`, `range-for` |
|
||
|
||
---
|
||
|
||
如需我生成一份 `.cpp` 文件、或你希望看到某种使用场景的完整案例,比如:
|
||
|
||
* 大量数据插入性能优化
|
||
* 模拟二维表格
|
||
* 搜索 + 删除特定值
|
||
* 用 `vector` 实现栈/队列
|
||
|
||
我可以为你分别写出来。需要哪一种?
|
||
|
||
|
||
Member functions
|
||
(constructor) Construct vector (public member function)
|
||
(destructor) Vector destructor (public member function)
|
||
operator= Assign content (public member function)
|
||
|
||
Iterators:
|
||
begin Return iterator to beginning (public member function)
|
||
end Return iterator to end (public member function)
|
||
rbegin Return reverse iterator to reverse beginning (public member function)
|
||
rend Return reverse iterator to reverse end (public member function)
|
||
cbegin Return const_iterator to beginning (public member function)
|
||
cend Return const_iterator to end (public member function)
|
||
crbegin Return const_reverse_iterator to reverse beginning (public member function)
|
||
crend Return const_reverse_iterator to reverse end (public member function)
|
||
|
||
Capacity:
|
||
size Return size (public member function)
|
||
max_size Return maximum size (public member function)
|
||
resize Change size (public member function)
|
||
capacity Return size of allocated storage capacity (public member function)
|
||
empty Test whether vector is empty (public member function)
|
||
reserve Request a change in capacity (public member function)
|
||
shrink_to_fit Shrink to fit (public member function)
|
||
|
||
Element access:
|
||
operator[] Access element (public member function)
|
||
at Access element (public member function)
|
||
front Access first element (public member function)
|
||
back Access last element (public member function)
|
||
data Access data (public member function)
|
||
|
||
Modifiers:
|
||
assign Assign vector content (public member function)
|
||
push_back Add element at the end (public member function)
|
||
pop_back Delete last element (public member function)
|
||
insert Insert elements (public member function)
|
||
erase Erase elements (public member function)
|
||
swap Swap content (public member function)
|
||
clear Clear content (public member function)
|
||
emplace Construct and insert element (public member function)
|
||
emplace_back Construct and insert element at the end (public member function)
|
||
|
||
Allocator:
|
||
get_allocator Get allocator (public member function)
|
||
|
||
Non-member function overloads
|
||
relational operators Relational operators for vector (function template)
|
||
swap Exchange contents of vectors (function template) |