别再死记硬背了!5 分钟彻底搞懂 C++ `vector` 的增删改查,特别是 `find` 的坑!
·
痛点直击:
想往数组里加个数,不知道用啥?
想删个元素,程序直接崩溃?
想找一个值,写了半天循环还报错?
别再翻烂文档、死记 API 了!今天就用大白话 + 实战代码,带你一次性打通 std::vector 的 增、删、改、查 四大操作。尤其是那个让无数人踩坑的 find ——看完这篇,你再也不会写错!
📥 增:push_back 是你的亲兄弟
想往容器里加东西?闭眼用 push_back!
- 它是干啥的:把新元素塞到
vector的“屁股后面”(尾部)。 - 为啥安全:自动扩容、不用管内存、不会越界。
#include <vector>
using namespace std;
vector<int> arr; // 空空如也
arr.push_back(10); // 塞个 10
arr.push_back(20); // 再塞个 20
// 现在 arr = [10, 20]
✅ 记住:只要是追加数据,首选 push_back!
🔍 查:find 的大坑(必看!)
❌ 错误示范(新手高频雷区):
auto pos = arr.find(20); // 编译报错!vector 没有 find 成员函数!
⚠️ 注意:
find()是map、set这些关联容器才有的成员函数。vector没有!
✅ 正确姿势:用 std::find(来自 <algorithm>)
#include <algorithm> // 必须包含!
#include <iostream>
#include <vector>
using namespace std;
int target = 20;
auto it = find(arr.begin(), arr.end(), target); // 返回迭代器(类似指针)
if (it != arr.end()) {
cout << "找到了!值是: " << *it << endl;
cout << "下标是: " << distance(arr.begin(), it) << endl; // 手动算下标
} else {
cout << "没找到!" << endl;
}
🔑 关键点:
std::find返回的是 迭代器,不是下标!- 要判断是否找到:对比
it != arr.end() - 要取值:用
*it - 要下标:用
distance(arr.begin(), it)
🗑️ 删:erase 配合迭代器,稳如老狗
想删除某个元素?必须传入迭代器位置!
// 假设我们已经用 find 找到了 it
if (it != arr.end()) {
arr.erase(it); // 删除该位置的元素
}
💡 注意:
erase会让后面的元素自动前移,容器大小减 1。- 不要对已删除的迭代器再操作(它失效了!)。
- 如果要删多个元素(比如所有等于 20 的),要用
remove-erase惯用法(进阶内容,后续可讲)。
✏️ 改:直接赋值 or 引用修改
方法一:通过下标(简单粗暴)
arr[0] = 100; // 把第一个元素改成 100
方法二:通过迭代器(配合 find 更优雅)
auto it = find(arr.begin(), arr.end(), 20);
if (it != arr.end()) {
*it = 999; // 直接解引用修改
}
方法三:遍历时用引用(高效修改)
for (auto& x : arr) { // 注意是 auto&
if (x == 20) x = 888;
}
🧠 一张表总结:增删改查速查指南
| 操作 | 推荐方式 | 关键要点 |
|---|---|---|
| 增 | push_back(value) |
只能尾部插入 |
| 查 | std::find(begin, end, value) |
返回迭代器,需判 != end() |
| 删 | vec.erase(iterator) |
迭代器必须有效,删后失效 |
| 改 | vec[i] = x 或 *it = x |
下标 or 迭代器均可 |
💬 最后送你一句话:
“刚开始学别怕报错,把上面那段代码自己敲一遍,跑通了,这关你就过了!”
vector 是 C++ 最基础也最常用的容器,掌握好它的基本操作,是你迈向高效 C++ 编程的第一步。
更多推荐




所有评论(0)