1. 为什么我们需要重新理解vector的增删改查?
在C++开发中,vector是最常用的容器之一,但很多开发者对它的基础操作存在严重误解。我见过太多团队因为对vector的find操作理解不到位,导致性能问题和难以追踪的bug。最近review代码时发现一个典型案例:某位同事用std::find在10万级数据量的vector中反复查找,导致接口响应时间从50ms飙升到2秒。
vector的增删改查看似基础,实则暗藏玄机。特别是find操作,不同实现方式的性能差异可能达到100倍以上。理解这些细节,能让你避免写出看似正确实则低效的代码。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. vector基础操作全解析
2.1 创建和初始化vector的现代C++写法
传统初始化方式:
cpp复制std::vector<int> v;
v.push_back(1);
v.push_back(2);
现代C++推荐使用初始化列表:
cpp复制std::vector<int> v = {1, 2, 3, 4, 5}; // 初始化列表
std::vector<int> v2(10, 0); // 10个元素,每个都是0
注意:初始化列表方式在C++11及以上版本支持,比多次push_back效率更高,因为减少了可能的扩容操作。
2.2 元素访问的安全姿势
常见访问方式对比:
operator[]:不检查越界,访问越界时行为未定义at():检查越界,越界时抛出std::out_of_range异常front()/back():访问首尾元素
cpp复制std::vector<int> v = {1, 2, 3};
v[0] = 10; // 快速但不安全
v.at(1) = 20; // 安全但有开销
2.3 插入和删除的高效实践
在vector中间插入/删除元素会导致元素移动,时间复杂度O(n)。优化技巧:
- 批量插入使用insert的迭代器版本
- 删除元素考虑先标记再批量删除
cpp复制// 高效批量插入
std::vector<int> v1 = {1, 2, 3};
std::vector<int> v2 = {4, 5, 6};
v1.insert(v1.e
