📜  如何按值从向量中删除元素c ++(1)

📅  最后修改于: 2023-12-03 15:09:09.598000             🧑  作者: Mango

如何按值从向量中删除元素 C++

在 C++ 中使用向量(vector)通常是一种非常方便的方式来处理一组元素,但有时我们需要从向量中删除特定的元素。这篇文章将介绍如何在向量中按值删除一个或多个元素,并给出相应的代码示例。

1. 利用 erase() 函数删除元素

在向量中删除元素最简单的方法是使用容器的成员函数 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 的元素了。

2. 利用 remove() 和 erase() 函数删除元素

除了使用循环逐个检查和删除元素的方法外,我们还可以使用 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() 函数来删除向量中的元素是一种更为简单和高效的方法,相较于逐个遍历和删除的方法具有更好的性能和可读性。