加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

通过在C中直接访问其迭代器来删除容器的元素

发布时间:2020-12-16 05:00:46 所属栏目:百科 来源:网络整理
导读:我已经声明了一个std :: vector int在我的main函数中,并希望从中删除所有偶数元素,但只能将它的迭代器传递给一个名为remove_even的函数,该函数接受容器的开始和结束迭代器. #include iostream#include algorithm#include vectorvoid remove_even(auto start,
我已经声明了一个std :: vector< int>在我的main函数中,并希望从中删除所有偶数元素,但只能将它的迭代器传递给一个名为remove_even的函数,该函数接受容器的开始和结束迭代器.
#include <iostream>
#include <algorithm>
#include <vector>

void remove_even(auto start,auto end) {
    while(start != end) {
        if(*start % 2 == 0)
        // Remove element from container
    }
}

int main() {
    std::vector<int> vec = {2,4,5,6,7};
    remove_even(vec.begin(),vec.end());
}

有没有办法在C中这样做或者我必须直接将我的向量传递给函数?

解决方法

它是类std :: vector本身,它具有允许擦除向量中所需元素的擦除方法.

使用迭代器所能做的就是调用标准算法std :: remove_if,然后在方法erase的调用中使用返回的迭代器.

例如

#include <iostream>
#include <vector>
#include <algorithm>

std::vector<int>::iterator remove_even( std::vector<int>::iterator first,std::vector<int>::iterator last )
{
    return std::remove_if( first,last,[]( int x ) { return x % 2 == 0; } );
}

int main()
{
    std::vector<int> vec = { 2,7 };

    for ( int x : vec ) std::cout << x << ' ';
    std::cout << std::endl;

    vec.erase( remove_even( vec.begin(),vec.end() ),vec.end() );

    for ( int x : vec ) std::cout << x << ' ';
    std::cout << std::endl;
}

程序输出是

2 4 5 6 7 
5 7

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读