删除元素
本课属于 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(),检查这一点可以避免错误。
这种模式可以让元素删除变得安全、可预测。在维护动态集合时,这种模式尤其有用,因为你需要根据用户输入或程序逻辑删除特定项目。记得在删除前始终检查迭代器是否有效。
挑战
简单编写一个程序,演示如何结合使用 std::find() 和 .erase() 方法从 std::vector 中删除元素。这个挑战将检验你是否理解如何安全地从 vector 中删除指定元素并查看结果。
程序将收到以下输入:
- 一个整数
n,表示最初要添加到 vector 中的元素数量 - 接着是
n个要插入 vector 的整数 - 一个整数
m,表示要删除的元素数量 - 接着是
m个整数,表示要从 vector 中删除的元素
你的程序应当:
- 创建一个空的
std::vector<int> - 读取要添加的元素数量,并使用
.push_back()将这些元素插入 vector - 所有元素插入后,输出 vector 的初始大小
- 读取要删除的元素数量
- 对于每个要删除的元素,使用
std::find()定位它,然后在找到时使用.erase()将其删除 - 每次尝试删除后,输出 vector 当前的大小
- 最后,遍历 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;
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: C++ 在线编译器