C++ vector动态数组:核心操作与高效使用指南

1. 为什么每个C++开发者都需要掌握vector

在C++标准库的容器家族中,vector就像瑞士军刀一样不可或缺。作为动态数组的终极实现,它完美平衡了内存效率与操作便利性。我见过太多初级开发者还在手动管理原生数组,每次看到new[]delete[]的显式调用就头皮发麻——这简直是在给自己埋雷。

vector的底层实现是一块连续内存空间,这意味着它保留了原生数组的缓存友好特性。但与裸数组不同,它能自动处理内存扩容,当现有容量不足时,vector会按照特定策略(通常是2倍或1.5倍)重新分配更大空间。这个特性让vector在需要频繁增删元素的场景下依然能保持高效。

关键认知:vector的size()表示当前元素数量,capacity()才是实际分配的内存容量。两者差值就是无需重新分配内存还能添加的元素数量。

需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。

2. vector核心操作全图解

2.1 创建与初始化vector的7种姿势

cpp复制// 1. 默认构造 - 空vector
vector<int> v1;  

// 2. 指定初始大小(元素默认初始化)
vector<string> v2(5);  // 5个空字符串

// 3. 指定大小和初始值
vector<double> v3(10, 3.14);  // 10个3.14

// 4. 通过迭代器范围初始化
int arr[] = {1,3,5,7};
vector<int> v4(begin(arr), end(arr));

// 5. 列表初始化 (C++11)
vector<char> v5 = {'a', 'e', 'i', 'o', 'u'};

// 6. 拷贝构造
vector<int> v6(v4);

// 7. 移动构造 (C++11)
vector<int> v7(std::move(v6));  // v6现在为空

实际项目中,我常用第3种和第5种方式。特别是列表初始化,代码意图一目了然。注意第7种的移动构造会"掏空"原vector,这在转移大型数据时能避免不必要的拷贝。

2.2 元素访问的5种方式与安全边界

cpp复制vector<int> nums = {10,20,30};

// 1. 下标访问 - 不检查越界
int x = 

内容推荐

已经到底了哦
已经到底了哦