C++ 如何使用erase()和reverse_iterator从向量中删除元素

C++ 如何使用erase()和reverse_iterator从向量中删除元素

给定向量,任务是使用erase()和reverse_iterator从该向量中删除一个元素。

例子:

输入: vector = {1, 4, 7, 10, 13, 16, 19},元素 = 16
输出: 1 4 7 10 13 19

输入: vector = {99, 89, 79, 69, 59},元素 = 89
输出: 99 79 69 59

方法:

  • 获取向量和要删除的元素
  • 在向量上初始化反向迭代器
  • 使用base和erase删除所需的元素

使用base的原因:erase()返回a指向在正向意义上刚刚删除的元素之后的元素的新位置,因此我们不能在使用反向迭代器时使用相同的过程,其中我们要朝反向而不是正向前进。而且,我们不能将反向迭代器传递给erase()函数作为参数,否则它会产生编译错误。

反向迭代器只是反转给定迭代器的方向的迭代器。这些反转的操作在基础迭代器上发生。我们可以使用reverse_iterator::base()函数获取该迭代器。事实上,itr.base()和itr之间的关系是: &*(reverse_iterator(itr))==&*(itr-1)

以下是上述方法的实现:

// C++程序删除向量元素
//使用erase()和反向迭代器

# include <iostream>
# include <vector>

使用命名空间std;

//从vector 'vec'删除元素'num'的函数
vector<int> delete_ele(vector<int> vec, int num)
{
    // 在向量上初始化反向迭代器
    vector<int>::reverse_iterator itr1;

    for (itr1 = vec.rbegin(); itr1 < vec.rend(); itr1++) {

        if (*itr1 == num) {

            //删除元素=16
            vec.erase((itr1 + 1).base());
        }
    }

    return vec;
}

//驱动程序
int main()
{
    vector<int> vec = { 1, 4, 7, 10, 13, 16, 19 };

    //我们想删除元素=16
    int num = 16;

    vector<int>::iterator itr1;

    cout << "Vector原本:\n";
    for (itr1 = vec.begin(); itr1 < vec.end(); itr1++) {

        //打印向量的原始元素
        cout << *itr1 << " ";
    }

    cout << "\n\n要删除的元素:"
          << num << "\n\n";

    //重新初始化向量'vec'
    //从向量中删除'num'
    //并保持其他剩余
    //元素不变
    vec = delete_ele(vec, num);

    vector<int>::iterator itr2;

    cout << "删除后的向量:\n";
    for (itr2 = vec.begin(); itr2 < vec.end(); itr2++) {

        //打印向量的其他剩余元素
        cout << *itr2 << " ";
    }

    return 0;
}
// 本代码由supratik_mitra贡献
原向量:
1 4 7 10 13 16 19 

要删除的元素:16

删除后的向量:
1 4 7 10 13 19

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程