0Pricing
C++ Academy · 课时

修改向量:insert、erase、clear

插入、删除和清空元素,同时牢记迭代器失效规则

修改向量:insert、erase、clear 是 CoddyKit 上的免费 C++ Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 C++ Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 C++ Academy 课程共包含 4 节课。

在末尾插入

最快的插入方式是 push_back 或 emplace_back,二者都会以均摊 O(1) 的复杂度在末尾添加元素。

在任意位置插入

insert(pos, value) 会将 pos 之后的所有元素向右移动。操作复杂度为 O(n)。

std::vector<int> v = {1, 2, 4, 5};
v.insert(v.begin() + 2, 3);   // {1, 2, 3, 4, 5}

插入一个范围

一次性插入另一个容器中的所有元素。

std::vector<int> v = {1, 5};
std::vector<int> mid = {2, 3, 4};
v.insert(v.begin() + 1, mid.begin(), mid.end());
// {1, 2, 3, 4, 5}

插入多个副本

插入同一个值的 n 个副本。

std::vector<int> v = {1, 4};
v.insert(v.begin() + 1, 2, 99);   // {1, 99, 99, 4}

删除一个元素

erase(pos) 会移除迭代器所指向的元素,并将其后面的所有元素向左移动。它返回指向下一个元素的迭代器。

std::vector<int> v = {1, 2, 3, 4};
v.erase(v.begin() + 1);   // {1, 3, 4}

删除一个范围

移除半开区间 [first, last) 中的所有元素。

v.erase(v.begin() + 1, v.begin() + 3);

擦除-移除惯用法

若要移除所有匹配某个谓词的元素且不留下空隙,请组合使用 std::remove_if 和 erase。

#include <algorithm>
v.erase(
    std::remove_if(v.begin(), v.end(), [](int x) { return x < 0; }),
    v.end()
);

C++20 的 std::erase 和 std::erase_if

C++20 新增了封装擦除-移除惯用法的自由函数。

std::erase(v, 0);                    // remove all 0s
std::erase_if(v, [](int x) { return x < 0; });

clear:移除所有元素

clear() 会移除所有元素,但保留容量。当您计划重新填充 vector 时,这很有用。

pop_back:移除最后一个元素

以 O(1) 的复杂度移除最后一个元素。该函数没有返回值;如果需要这个元素,请先获取它。

int last = v.back();
v.pop_back();

迭代器失效规则

insert 和 erase 会使从修改位置开始及其之后的所有迭代器失效。erase 会返回下一个有效迭代器,因此您可以继续迭代。

快速检查

单独使用 std::remove_if 会对 vector 做什么?

回顾

insert 和 erase 可以在任意位置以 O(n) 的复杂度工作。在末尾执行 O(1) 操作时,请使用 push_back/pop_back。请使用擦除-移除惯用法(或 C++20 的 std::erase_if)删除匹配的元素。

常见问题解答

「修改向量:insert、erase、clear」课时是免费的吗?

是的 — 「修改向量:insert、erase、clear」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 C++ Academy 课程的其余内容,请升级到 CoddyKit PRO。 C++ Academy 课程共包含 4 节课。

「修改向量:insert、erase、clear」这节课中我会学到什么?

插入、删除和清空元素,同时牢记迭代器失效规则 你通过在浏览器中直接运行的动手代码来练习 C++ Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 C++ Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 C++ Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「修改向量:insert、erase、clear」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 C++ Academy 课中编写并运行代码吗?

能。每节 C++ Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. std::vector 基础:push_back、size、capacity
  2. 遍历向量:索引、范围 for、迭代器
  3. 修改向量:insert、erase、clear
  4. vector、std::array 与 C 数组的比较
← 返回 C++ Academy