Add stl vector
All checks were successful
ci/woodpecker/push/deploy Pipeline was successful
ci/woodpecker/push/test Pipeline was successful

This commit is contained in:
Sainnhe Park 2023-03-03 18:31:35 +08:00
parent 7e474083a9
commit a99d75b44c
2 changed files with 60 additions and 0 deletions

View File

@ -66,6 +66,7 @@
- [排序](./stl_sorting.md) - [排序](./stl_sorting.md)
- [哈希表](./stl_hash_table.md) - [哈希表](./stl_hash_table.md)
- [字符串](./stl_string.md) - [字符串](./stl_string.md)
- [向量](./stl_vector.md)
- [优先级队列](./stack_and_queue.md) - [优先级队列](./stack_and_queue.md)
# 经典代码 # 经典代码

59
notes/src/stl_vector.md Normal file
View File

@ -0,0 +1,59 @@
# 向量
```cpp
#include <algorithm>
#include <iostream>
#include <vector>
int main(int argc, const char *argv[]) {
// 初始化
std::vector<int> v1;
// 创建长度为 10 的向量(缺省值填充)
std::vector<int> v2(10);
// 创建长度为 10值为 7 的向量
std::vector<int> v3(10, 7);
// 从另一个向量深拷贝
std::vector<int> v4 = v2;
// 释放内存
v4.clear();
v4.shrink_to_fit();
// 修改数据
v3[1] = 100;
// 删除数据,传递进去的参数是迭代器
v3.erase(v3.begin() + 1);
v3.erase(v3.begin() + 3, v3.end());
// 插入到尾部
v3.push_back(67);
// 弹出尾部元素
v3.pop_back();
// 插入到最前面和最后面
// 意思是插入完成后,第一个参数所在位置的值是第二个参数
v3.insert(v3.begin(), 2);
v3.insert(v3.end(), 2);
// 访问第一个数和最后一个数
std::cout << v3.front() << " " << v3.back() << std::endl;
// 合并两个向量
// 意思是把 v2 向量插入到 v3 的尾部
v3.insert(v3.end(), v2.begin(), v2.end());
// 交换 v3 和 v2相当于把 v3 的内容覆盖到 v2把 v2 的内容覆盖到 v3
v3.swap(v2);
// 重新调整大小
// 如果传入的参数超过了向量原本的长度,则在扩展后的末尾填充缺省值
// 如果传入的参数小于向量原本的长度,则只保留前 N 个元素,后面的部分删掉
v3.resize(10);
// 如果传入的参数超过了向量原本的长度,则在扩展后的末尾填充 99
v3.resize(15, 99);
// 查找最大值和最小值,返回的是一个指针
// #include <algorithm>
std::cout << *std::max_element(v3.begin(), v3.end()) << std::endl;
std::cout << *std::min_element(v3.begin(), v3.end()) << std::endl;
for (int i = 0; i < v3.size(); ++i) {
std::cout << v3[i] << " ";
}
std::cout << std::endl;
}
```