diff --git a/notes/src/SUMMARY.md b/notes/src/SUMMARY.md index 7d12da2..7450af0 100644 --- a/notes/src/SUMMARY.md +++ b/notes/src/SUMMARY.md @@ -66,6 +66,7 @@ - [排序](./stl_sorting.md) - [哈希表](./stl_hash_table.md) - [字符串](./stl_string.md) +- [向量](./stl_vector.md) - [优先级队列](./stack_and_queue.md) # 经典代码 diff --git a/notes/src/stl_vector.md b/notes/src/stl_vector.md new file mode 100644 index 0000000..1a2f9b9 --- /dev/null +++ b/notes/src/stl_vector.md @@ -0,0 +1,59 @@ +# 向量 + +```cpp +#include +#include +#include + +int main(int argc, const char *argv[]) { + // 初始化 + std::vector v1; + // 创建长度为 10 的向量(缺省值填充) + std::vector v2(10); + // 创建长度为 10,值为 7 的向量 + std::vector v3(10, 7); + // 从另一个向量深拷贝 + std::vector 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 + 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; +} +```