痛点直击
想往数组里加个数,不知道用啥?
想删个元素,程序直接崩溃?
想找一个值,写了半天循环还报错?

别再翻烂文档、死记 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()mapset 这些关联容器才有的成员函数。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++ 编程的第一步。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐