Menu
CoddyTech

删除元素

本课属于 Coddy C++ 学习旅程的“逻辑与流程”单元。第 16 课,共 56 课。

有时,当不再需要某些元素时,你需要从 vector 中移除它们。使用 vector 时,你需要将迭代器与 .erase() 方法搭配使用。你可以将 std::find() 与 .erase() 结合起来,按值移除元素。

下面介绍如何从 vector 中删除一个元素。std::find() 来自 <algorithm> 头文件,因此要和 <vector> 一起包含:

#include <algorithm>
#include <vector>
std::vector<int> numbers = {10, 20, 30, 40};
auto it = std::find(numbers.begin(), numbers.end(), 20);
if (it != numbers.end()) {
    numbers.erase(it);  // 删除迭代器所指向的元素
}

调用 erase() 后,该位置的元素会被删除,后面的所有元素都会向前移动。如果你尝试查找并删除一个不存在的元素,find() 会返回 end(),检查这一点可以避免错误。

这种模式可以让元素删除变得安全、可预测。在维护动态集合时,这种模式尤其有用,因为你需要根据用户输入或程序逻辑删除特定项目。记得在删除前始终检查迭代器是否有效。

challenge icon

挑战

简单

编写一个程序,演示如何结合使用 std::find() 和 .erase() 方法从 std::vector 中删除元素。这个挑战将检验你是否理解如何安全地从 vector 中删除指定元素并查看结果。

程序将收到以下输入:

  • 一个整数 n,表示最初要添加到 vector 中的元素数量
  • 接着是 n 个要插入 vector 的整数
  • 一个整数 m,表示要删除的元素数量
  • 接着是 m 个整数,表示要从 vector 中删除的元素

你的程序应当:

  1. 创建一个空的 std::vector<int>
  2. 读取要添加的元素数量,并使用 .push_back() 将这些元素插入 vector
  3. 所有元素插入后,输出 vector 的初始大小
  4. 读取要删除的元素数量
  5. 对于每个要删除的元素,使用 std::find() 定位它,然后在找到时使用 .erase() 将其删除
  6. 每次尝试删除后,输出 vector 当前的大小
  7. 最后,遍历 vector 中剩余的元素,并按顺序输出

请使用以下准确的输出格式:

vector 的初始大小:

Initial size: [size]

每次尝试删除后:

After removing [number]: size = [current_size]

最终剩余的元素:

Remaining elements: [element1] [element2] [element3] ...

请记住,.erase() 需要一个迭代器,因此你必须先使用 std::find() 定位元素。删除前务必检查是否找到了该元素。使用基于范围的 for 循环,按当前顺序输出剩余元素。

亲手试试

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    // 读取要添加的元素数量
    int n;
    cin >> n;
    
    // 创建一个空的 vector
    vector<int> myVector;
    
    // 读取并插入 n 个元素
    for (int i = 0; i < n; i++) {
        int element;
        cin >> element;
        // 将 element 插入 vector
    }
    
    // 读取要移除的元素数量
    int m;
    cin >> m;
    
    // TODO:在下方编写你的代码
    // 1. 输出 vector 的初始大小
    // 2. 找到每个要移除的元素,用 .erase() 移除,并在每次移除后输出 vector 的大小
    // 3. 输出 vector 中剩余的元素
    
    return 0;
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: C++ 在线编译器