1. 为什么vector是C++开发者的首选容器
在C++标准模板库(STL)中,vector就像瑞士军刀一样不可或缺。作为动态数组的实现,它完美平衡了性能与易用性。我见过太多新手程序员坚持使用原始数组,直到他们发现vector可以节省90%的内存管理代码。
vector的核心优势在于其连续内存布局。想象你有一排紧密排列的储物柜,每个柜子都紧挨着下一个——这就是vector的内存结构。这种布局使得CPU缓存预取机制能发挥最大效用,实测显示遍历vector比链表快3-5倍。
2. vector的创建与初始化技巧
2.1 五种创建方式对比
cpp复制// 空vector(最常用)
std::vector<int> v1;
// 预分配大小(避免频繁扩容)
std::vector<std::string> v2(100);
// 带初始值的预分配
std::vector<double> v3(50, 3.14);
// 初始化列表(C++11起)
std::vector<char> v4{'a', 'b', 'c'};
// 从数组构造
int arr[] = {1,3,5,7};
std::vector<int> v5(arr, arr+4);
经验:在知道元素数量的情况下,使用reserve()预分配空间可以减少5-10倍的内存分配开销。我曾优化过一个金融计算程序,仅此一项改动就提升20%性能。
2.2 高维vector的陷阱
嵌套vector虽然方便,但要注意内存碎片问题:
cpp复制std::vector<std::vector<int>> matrix(1000, std::vector<int>(1000));
// 实际内存是非连续的"数组的数组"
对于大型矩阵,考虑扁平化存储:
cpp复制// 更优的方案:使用单个vector模拟二维
std::vector<int> flat_matrix(1000*1000);
auto access = [&](int x, int y) { return flat_matrix[y*1000 + x]; };
3. 元素操作的核心细节
3.1 添加元素的性能对比
| 方法 | 适用场
