Renewed Structure
This commit is contained in:
223
std-Cpp/STL/STL-Vector/README.md
Normal file
223
std-Cpp/STL/STL-Vector/README.md
Normal file
@@ -0,0 +1,223 @@
|
||||
以下是 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)
|
31
std-Cpp/STL/STL-Vector/define.cpp
Normal file
31
std-Cpp/STL/STL-Vector/define.cpp
Normal file
@@ -0,0 +1,31 @@
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
using namespace std;
|
||||
int main(){
|
||||
vector<int> a;
|
||||
vector<int> b(3,100);//b = {100, 100, 100}
|
||||
vector<int> c(b.begin(),b.end());
|
||||
vector<int> d(c);
|
||||
|
||||
for(/*vector<int>::iterator*/ auto ti = b.begin(); ti != b.end(); ti++){
|
||||
cout << *ti << " ";
|
||||
}
|
||||
cout << endl;
|
||||
|
||||
b.push_back(300);
|
||||
b.push_back(500);
|
||||
|
||||
cout << b.size() << " " << b.capacity() << endl;
|
||||
b.resize(10);
|
||||
b.reserve(100);
|
||||
cout << b.size() << " " << b.capacity() << endl;
|
||||
|
||||
auto ti = b.begin() + 3;
|
||||
b.insert(ti, 20);
|
||||
for(int i = 0; i < b.size(); i++){
|
||||
cout << b.at(i) << " ";
|
||||
}
|
||||
cout << endl;
|
||||
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user