📅  最后修改于: 2023-12-03 15:09:09.598000             🧑  作者: Mango
在 C++ 中使用向量(vector)通常是一种非常方便的方式来处理一组元素,但有时我们需要从向量中删除特定的元素。这篇文章将介绍如何在向量中按值删除一个或多个元素,并给出相应的代码示例。
在向量中删除元素最简单的方法是使用容器的成员函数 erase()。erase()函数的基本语法如下:
iterator vector::erase(const_iterator position);
iterator vector::erase(const_iterator first, const_iterator last);
其中,第一个版本删除由迭代器 position 指向的元素,第二个版本删除位于范围 [first, last) 内的所有元素。我们可以对 erase() 函数传入一个值来删除特定元素,并利用循环删除所有的相同元素。
下面是一个示例程序,演示了如何从一个整数向量中删除指定的元素:
#include <iostream>
#include <vector>
int main()
{
std::vector<int> myVector{ 1, 2, 3, 4, 5, 3, 6, 7, 3 };
int valueToDelete = 3;
// 使用循环删除所有值为 valueToDelete 的元素
auto it = myVector.begin();
while (it != myVector.end())
{
if (*it == valueToDelete)
{
it = myVector.erase(it);
}
else
{
++it;
}
}
// 输出删除后的向量
for (int num : myVector)
{
std::cout << num << " ";
}
return 0;
}
上述代码将输出:
1 2 4 5 6 7
可以看到,输出结果中已经没有值为 3 的元素了。
除了使用循环逐个检查和删除元素的方法外,我们还可以使用 remove() 函数来简化代码。remove() 函数的语法如下:
template< class T >
void remove(std::vector<T>& v, const T& value);
该函数将容器 v 中的所有等于 value 的元素移动到容器末尾,然后返回一个新的迭代器,指向容器中第一个移动到末尾的元素。我们可以将该迭代器直接作为 erase() 函数的输入,来从向量中删除所有等于指定值的元素。
下面是一个示例程序,演示了如何使用 remove() 和 erase() 函数从一个整数向量中删除指定的元素:
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
std::vector<int> myVector{ 1, 2, 3, 4, 5, 3, 6, 7, 3 };
int valueToDelete = 3;
// 使用 remove() 和 erase() 函数删除所有值为 valueToDelete 的元素
myVector.erase(std::remove(myVector.begin(), myVector.end(), valueToDelete), myVector.end());
// 输出删除后的向量
for (int num : myVector)
{
std::cout << num << " ";
}
return 0;
}
输出结果与前面的示例程序相同:
1 2 4 5 6 7
简单总结,使用 remove() 和 erase() 函数来删除向量中的元素是一种更为简单和高效的方法,相较于逐个遍历和删除的方法具有更好的性能和可读性。