#include <vector>
#include <algorithm>
#include <iostream>
int main() {
// 1. 初始化与基本操作
std::vector<int> nums = {3, 1, 4, 1, 5}; // 初始化
nums.push_back(9); // 尾部插入
nums.pop_back(); // 尾部删除
// 2. 内存管理
std::cout << "容量: " << nums.capacity() << std::endl; // 预分配空间
nums.shrink_to_fit(); // 释放多余内存
// 3. 迭代器遍历
for (auto it = nums.begin(); it != nums.end(); ++it) {
std::cout << *it << " ";
}
// 4. 算法集成
std::sort(nums.begin(), nums.end()); // 快速排序
auto pos = std::find(nums.begin(), nums.end(), 4); // 查找元素
// 5. 高级技巧
std::vector<std::vector<int>> matrix(3, std::vector<int>(4, 0)); // 二维动态数组
}
核心特性解析
动态扩容
- 初始容量为0,添加元素时按指数级增长(通常$2^n$)
- capacity()获取预分配空间,size()获取实际元素数
内存控制
vector<int> v;
v.reserve(1000); // 预分配空间,避免频繁扩容
https://www.zhihu.com/zvideo/1998582288796104068 https://www.zhihu.com/zvideo/1998582329053046048 https://www.zhihu.com/zvideo/1998582383910346988 https://www.zhihu.com/zvideo/1998582543562344416 https://www.zhihu.com/zvideo/1998582600688764754 https://www.zhihu.com/zvideo/1998582639439914429 https://www.zhihu.com/zvideo/1998582679432603583 https://www.zhihu.com/zvideo/1998582765029987496 https://www.zhihu.com/zvideo/1998582803621761159 https://www.zhihu.com/zvideo/1998582803621761159/ https://www.zhihu.com/zvideo/1998582600688764754/ https://www.zhihu.com/zvideo/1998582543562344416/ https://www.zhihu.com/zvideo/1998582288796104068/ https://www.zhihu.com/zvideo/1998582639439914429/ https://www.zhihu.com/zvideo/1998582679432603583/ https://www.zhihu.com/zvideo/1998582329053046048/ https://www.zhihu.com/zvideo/1998582383910346988/ https://www.zhihu.com/zvideo/1998582765029987496/
使用emplace_back()直接构造元素,减少临时对象复制:
v.emplace_back(42); // 优于 push_back(42)
迭代器失效
| push_back() | 可能引起全部迭代器失效 |
| insert() | 插入点之后迭代器失效 |
| erase() | 被删元素之后迭代器失效 |
性能对比
| 随机访问 | $O(1)$ | 连续内存优势 |
| 尾部插入 | $O(1)$ | 均摊复杂度 |
| 中间插入 | $O(n)$ | 需移动后续元素 |
最佳实践
优先用range-based for循环:
for (const auto& num : nums) {
// 安全遍历
}
避免vector<bool>特化版,改用deque<bool>或bitset
移动语义优化大对象传输:
std::vector<Matrix> data;
data.push_back(Matrix(1000,1000)); // 触发复制构造
data.push_back(std::move(Matrix(1000,1000))); // 移动构造
https://www.zhihu.com/zvideo/1998582288796104068 https://www.zhihu.com/zvideo/1998582329053046048 https://www.zhihu.com/zvideo/1998582383910346988 https://www.zhihu.com/zvideo/1998582543562344416 https://www.zhihu.com/zvideo/1998582600688764754 https://www.zhihu.com/zvideo/1998582639439914429 https://www.zhihu.com/zvideo/1998582679432603583 https://www.zhihu.com/zvideo/1998582765029987496 https://www.zhihu.com/zvideo/1998582803621761159 https://www.zhihu.com/zvideo/1998582803621761159/ https://www.zhihu.com/zvideo/1998582600688764754/ https://www.zhihu.com/zvideo/1998582543562344416/ https://www.zhihu.com/zvideo/1998582288796104068/ https://www.zhihu.com/zvideo/1998582639439914429/ https://www.zhihu.com/zvideo/1998582679432603583/ https://www.zhihu.com/zvideo/1998582329053046048/ https://www.zhihu.com/zvideo/1998582383910346988/ https://www.zhihu.com/zvideo/1998582765029987496/
应用场景
通过data()成员函数可直接访问底层数组:
int* raw_ptr = nums.data(); // C++11起支持
网硕互联帮助中心





评论前必须登录!
注册