首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用反向迭代器从remove_if之后的向量中擦除: rbegin(),rend()

使用反向迭代器从remove_if之后的向量中擦除,可以按照以下步骤进行操作:

  1. 首先,使用remove_if算法对向量进行操作,将需要删除的元素移动到向量的末尾,并返回一个指向新的逻辑末尾的迭代器。
  2. 然后,使用erase方法擦除从remove_if返回的迭代器到向量的末尾之间的元素。

下面是一个示例代码:

代码语言:txt
复制
#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> nums = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

    // 使用remove_if算法将偶数移动到向量末尾
    auto newEnd = std::remove_if(nums.begin(), nums.end(), [](int num) {
        return num % 2 == 0;
    });

    // 使用erase方法擦除从remove_if返回的迭代器到向量末尾之间的元素
    nums.erase(newEnd, nums.end());

    // 输出结果
    for (const auto& num : nums) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

输出结果为:1 3 5 7 9

在这个例子中,我们使用remove_if算法将向量中的偶数移动到末尾,并返回一个指向新的逻辑末尾的迭代器newEnd。然后,我们使用erase方法擦除从newEnd到向量末尾之间的元素,即擦除了所有偶数。最后,我们输出剩余的奇数。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++效率掌握之STL库:list函数全解

list 的迭代器和 vector 的基本使用方法一致,但是底层的迭代器结构不同,在 list 底层结构剖析有详细的解答 传送门: 函数名 功能说明 begin + end 迭代器:begin...获取开头一个节点 + end 获取最后一个节点下一个位置 rbegin + rend 反向迭代器:rbegin 获取最后一个节点 + end 获取开头一个节点上一个位置 cbegin + cend 和...begin + end 一样,但是常量迭代器只读 crbegin + crend 和 rbegin + rend 一样,但是反向常量迭代器只读 值得注意的是: begin 与 end 为正向迭代器,对迭代器执行...++ 操作,迭代器向后移动 rbegin(end) 与 rend(begin) 为反向迭代器,对迭代器执行 ++ 操作,迭代器向前移动 代码测试示例: #include #include...list 满足特定条件的所有元素 unique 从 list 中移除连续重复的元素 merge 将两个已排序的列表合并成一个有序列表 sort 对 list 中的元素进行排序 reverse 将 list

6810

C++STL 2——序列容器 array、vector 、deque、 list 和 forward_list

访问容器中任意元素的速度要比前三种容器慢,这是因为 list 必须从第一个元素或最后一个元素开始访问,需要沿着链表移动,直到到达想要的元素。...函数成员 array vector deque begin() - 返回幵始迭代器 是 是 是 end() - 返回结束迭代器 是 是 是 rbegin() - 返回反向'开始迭代器...是 是 是 rend() - 返回反向结束迭代器 是 是 是 cbegin() - 返M const开始迭代器 是 是 是 cend() - 返回const结束迭代器 是 是 是 crbegin()...- 返回const反向开始迭代器 是 是 是 crend() - 返回const反向结束迭代器 是 是 是 assign() - 用新元素替换原有内容 - 是 是 operator=() - 复制同类型容器的元素...函数成员 list forward list begin() - 返回开始迭代器 是 是 end() - 返回结束迭代器 是 是 rbegin() - 返回反向开始迭代器 是 - rend(

63020
  • 【Example】C++ 标准库常用容器全面概述

    pop_back 删除vector末尾处的元素。 push_back 在vector末尾处追加一个元素。 rbegin 返回起始位置的反向迭代器。 rend 返回末尾位置的反向迭代器。...remove_if 移除满足谓词条件的元素。 rend 返回list中末尾的反向迭代器。 resize 重新分配长度。 reverse 反转list中元素的顺序。...rbegin 返回指向起始的逆向迭代器。 rend 返回指向末尾的逆向迭代器。 resize 手动改变大小。 shrink_to_fit 释放未使用的内存。 size 返回当前长度。...rbegin 返回指向起始的逆向迭代器。 rend 返回指向末尾的逆向迭代器。 size 返回set中的元素数量。 swap 交换两个set。...rbegin 返回一个反向迭代器,此反向迭代器指向Map起始位置。 rend 返回一个反向迭代器,此反向迭代器指向Map末尾位置。 size 返回当前Map中的元素数量。 swap 交换两个Map。

    3.4K30

    C++(STL):17---deque之迭代器使用

    rbegin() 返回指向最后一个元素的反向迭代器;如果是 const 类型容器,在该函数返回的是常量反向迭代器。 rend() 返回指向第一个元素之前一个位置的反向迭代器。...如果是 const 类型容器,在该函数返回的是常量反向迭代器。此函数通常和 rbegin() 搭配使用。...图 2 迭代器的具体功能示意图 从图 2 可以看出,这些成员函数通常是成对使用的,即 begin()/end()、rbegin()/rend()、cbegin()/cend()、crbegin()/crend...deque 模板类中还提供了 rbegin() 和 rend() 成员函数,它们分别表示指向最后一个元素和第一个元素前一个位置的随机访问迭代器,又常称为反向迭代器(如图 2 所示)。...在对容器做添加元素的操作之后,如果仍需要使用之前以创建好的迭代器,为了保险起见,一定要重新生成。

    80420

    反向迭代器

    在官方库中,反向迭代器是使用适配器封装的,即用普通的迭代器去作为适配器,然后封装出一个反向迭代器出来。  关于迭代器的解析,在介绍实习list以及迭代器这篇文章中有较详细讲解。...*this; } Slef& operator--() { ++it;//会调用正向迭代器的operator++(); return *this; }  反向迭代器的解引用 根据官方库中的源代码...,我们可以分析得到,反向迭代器中的rbegin和rend,与正向迭代器的end()和begin()是对称的。  ...Ptr operator->() { return *(operator*()); } 反向迭代器的构造函数 只需在初始化列表上,将迭代器指向的节点或顺序表中的某个位置赋值给反向迭代器的对象即可...//反向迭代器的rend() reverse_iterator rend() { //通过begin()返回链表的尾节点,然后通过构造函数将反向迭代器的对象初始化,并且是浅拷贝,指向同一块空间

    49020

    STL开发之迭代器(Iterator)

    1 迭代器定义 C++标准委员会对迭代器的定义为:指向元素范围(如数组或容器)中的某个元素,并能够使用一组操作符(至少使用自增(++)和解引用(*)操作符)遍历该范围中的元素的任何对象。...指针是最常见的一种迭代器,指针可以指向数组中的元素并使用自增运算符遍进行遍历,除了数组外,也可以使用迭代器对向量、列表、集合的等容器进行遍历。...3 迭代器的使用方式 按照迭代器的使用方式,迭代器可以分为以下四种,如: 正向迭代器:定义方式为:容器名::iterator,也是最常使用的迭代器类型,代码如下: #include 中插入了5个元素,然后又通过正向迭代器遍历容器元素并输出,运行结果如下: myvector contains: 5 4 3 2 1 从结果可知,通过反向迭代器向插入元素元素和插入顺序是方向的...常量反向迭代器:定义方式为:容器名::const_reverse_iterator下面的例子就通过常量反向迭代器遍历容器中的元素。

    76710

    初识C++ · 反向迭代器简介

    前言 继模拟实现了list和vector之后,我们对迭代器的印象也是加深了许多,但是我们实现的都是正向迭代器,还没有实现反向迭代器,那么为什么迟迟不实现呢?因为难吗?实际上还好。...反向迭代器的实现 我们大思路是通过判断传的迭代器的不同,调用对应正向迭代器的函数,所以我们创建的反向迭代器的类的成员变量是iterator,实现的接口还是那么几个,!...但是源码的操作不是的,计算机科学家们可能有点强迫症?希望对称。 这是链表中的反向迭代器,顺序表同理,主打的就是一个对称。...那么这时候的访问就成了问题,此时源码的神之一手出现了,比如链表,rbegin第一次访问的结果应该是5,那么我们就来一个临时变量,++之后(实际上是--)访问到5即可,这里是不可以迭代器-1或者迭代器--...list vector中反向迭代器的应用 注意,这里实现的反向迭代器是个简单版本,只适用于list和vector。

    9710

    C++ STL学习之【反向迭代器】

    ---- 前言 适配器模式是 STL 中的重要组成部分,在上一篇文章中我们学习了 容器适配器 的相关知识,即 stack 与 queue,除了 容器适配器 外,还有 迭代器适配器,借助 迭代器适配器,可以轻松将各种容器中的普通迭代器转变为反向迭代器...,这正是适配器的核心思想 ---- ️正文 反向迭代器适用于所有的容器,因此它是作为一个单独的 .h 文件出现的,别的容器如果想使用,直接包含就行了 1、反向迭代器设计 反向迭代器 reverse_iterator...结果:1 2 3 4 5 反向迭代器:反向遍历 结果:5 4 3 2 1 注:库中的反向迭代器在设计时,为了最求极致的对称,rbegin() 指向最后一个有效元素的下一个位置,rend() 指向第一个有效元素...,使用 Ptr 具体返回对象(引用 / 指针)是否为 const 修饰,取决于调用方 1.3、极致对称 在反向迭代器类中,有一个十分奇怪的函数 operator*(),它返回的并非当前所指向的对象,而且上一个对象...= v.rend()) { cout << *rit << " "; ++rit; //反向迭代器++,就是-- } cout << endl; } 可以成功使用反向迭代器进行遍历

    15920

    c++stl之反向迭代器用法及注意事项!!!

    反向迭代器 1.定义: 在容器中从尾元素向首元素反向移动的迭代器 对于反向迭代器,递增和递减的含义会颠倒过来 递增一个反向迭代器会移动到前一个元素 递减一个迭代器会移动到下一个元素...注意:除了forward_list容器之外,其他容器都支持反向迭代器 2.使用反向迭代器的相关函数 rbegin() —指向容器尾元素 rend()—指向容器首元素之前一个位置 crbegin()...毕竟反向迭代器的目的是在序列中反向移动。...例如我们输入的是: bird,dog,duck,pig,则这条语句会打印gip 问题所在: 我们使用的是反向迭代器,会方向处理string,因此上述输出语句从crbegin()开始反向打印line的内容...而我们希望按正常顺序打印从rcomma开始到line末尾间的字符。但是我们不能直接使用rcomma。 因为它是一个反向迭代器,意味着它会朝着string的开始位置移动.

    1.1K30

    LeetCode笔记:344. Reverse String

    由于拼接的方式有很多,效率也各不相同,所以查了资料之后,选择了StringBuilder的方式,据说速度最快,但有线程安全的问题,而且只有JDK5支持。...++的string本身就有一个reverse方法,接收开始和结束的迭代器,就可以做到反转了,但是提交后显示速度非常慢。...后来想到用copy配合rbegin、rend的反向迭代器来做,或者不要copy了,直接就返回一个反向迭代器构造出的字符串,看讨论中其他人也用过这种方法,但是可能是后来新增了示例,遇到有换行的字符串就会报错...(string s) { // 直接用reverse方法: return reverse(s.begin(), s.end()); // copy搭配反向迭代器...// 反向迭代器搭配构造函数: // return string(s.rbegin(), s.rend()); } }; 查看作者首页

    33410

    【C++】STL 容器 - set 集合容器 ② ( set 集合容器常用 api 简介 | 使用迭代器进行正向迭代与反向迭代 | 集合容器插入元素 | 插入单个元素 | 插入多个元素 )

    一、set 集合容器遍历 1、使用迭代器进行正向迭代与反向迭代 std::set 集合容器 提供了 begin、end、rbegin 和 rend 这几个成员函数,用于 获取 迭代访问链表中的元素 的...迭代器 , 函数原型如下 : 获取首元素迭代器 : 返回一个迭代器 , 指向集合的第一个元素 ; iterator begin(); const_iterator begin() const; 获取尾元素之后的迭代器...end() const; 获取指向尾元素的反向迭代器 : 该函数返回一个反向迭代器 , 指向集合容器的最后一个元素 ; 如果集合容器为空 , 则此操作未定义 ; 反向迭代器从集合的尾部向头部移动 ;...获取指向首元素之前的反向迭代器 : 返回一个反向迭代器 , 指向集合的 超出头部 ”的位置 , 即第一个元素的前一个位置 ; 该迭代器 它用于与 rbegin 一起实现完整的逆向迭代 ; reverse_iterator...rend(); const_reverse_iterator rend() const; 迭代器的位置如下图所示 : 正向迭代示例 : // 遍历 set 集合容器 , 正向迭代 for (set

    98110

    【C++】容器类_容器迭代器

    ()返回末尾的迭代器 erase()删除一个元素 front()返回第一个元素 get_allocator()返回list的配置器 insert()插入一个元素到list中 max_size(...push_front()在list的头部添加一个元素 rbegin()返回指向第一个元素的逆向迭代器 remove()从list删除元素 remove_if()按指定条件删除元素 rend(...)指向list末尾的逆向迭代器 resize()改变list的大小 reverse()把list的元素倒转 size()返回list中的元素个数 sort()给list排序 splice()合并两个...()返回指向容器最后一个元素的迭代器 最后,要介绍的是C++中map容器的基本用法,也就是很常见的key-value对容器。...()返回键值>=给定元素的第一个位置 max_size()返回可以容纳的最大元素个数 rbegin()返回一个指向map尾部的逆向迭代器 rend()返回一个指向map头部的逆向迭代器 size

    66610

    【反向迭代器】—— 我与C++的不解之缘(十七)

    前言 ​ 在STL中的迭代器部分,之前只关注与正向迭代器,忽视了反向迭代器;现在来看一下反向迭代器到底是个什么东西,以及反向迭代器怎么实现,怎么为之前自己模拟实现的容器增加反向迭代器?...反向迭代器的使用 ​ 首先,先来看一下反向迭代器是个什么东西,怎么使用? 这里以vector 和list 为例,看一下正向迭代器和反向迭代器的区别。...再回过头看rbegin 和rend 函数: rbegin 函数,返回容器一个指向容器最后一个元素的反向迭代器。。 rend 函数,返回容器表示反向迭代结束的反向迭代器。...反向迭代器的模拟实现 ​ 看完反向迭代器的使用,那反向迭代器到底是如何实现的呢?...根据正向迭代器和反向迭代器的使用比较,我们发现几个特点: 反向迭代器的++ 相当于正向迭代器的-- 。 反向迭代器的-- 相当与正向迭代器的++ 。 ​

    9210

    list容器

    list和vector的差别: 在list中,因为其内存分配是非连续的,因此不能像vector那样用[]操作符取值。而仅仅能用迭代器来訪问list中的元素。...List将元素按顺序储存在链表中,与向量(vector)相比, 它同意高速的插入和删除。可是随机訪问却比較慢。...true end() 返回末尾的迭代器 erase() 删除一个元素 front() 返回第一个元素 get_allocator() 返回list的配置器 insert()...) 删除第一个元素 push_back() 在list的末尾加入一个元素 push_front() 在list的头部加入一个元素 rbegin() 返回指向第一个元素的逆向迭代器...remove() 从list删除元素 remove_if() 按指定条件删除元素 rend() 指向list末尾的逆向迭代器 resize() 改变list的大小 reverse

    49200
    领券