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

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(

57520
您找到你想要的搜索结果了吗?
是的
没有找到

【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.2K30

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

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

69820

反向迭代

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

46220

STL开发之迭代(Iterator)

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

64110

【C++】反向迭代

文章目录 一、什么是反向迭代 二、STL 源码反向迭代实现 三、reverse_iterator 模拟实现 四、vector 和 list 反向迭代实现 一、什么是反向迭代 C++ 中一共有四种迭代...,反向迭代特点如下: rbegin() 相当于 end(); rend() 相当于 begin(); 反向迭代++相当于正向迭代–; 其他操作比如 * !...反向迭代使用反向迭代使用和正向迭代完全相同 void reverse_iterator_test() { vector v; v.push_back(1); v.push_back...---- 二、STL 源码反向迭代实现 我们可以通过参考 STL 源码反向迭代实现方式来学习如何实现反向迭代,如下: //list.h部分源码 -- SGI版 template <class...,而 rbegin 由 end 适配得到,所以反向迭代 operator*() 不是返回迭代当前位置数据,而是返回迭代前一个位置数据,不然会发生越界访问。

84600

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; } 可以成功使用反向迭代进行遍历

12020

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

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

84130

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

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

36210

LeetCode笔记:344. Reverse String

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

31110

【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

63910

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

47200

【C++】STL——反向迭代模拟实现:迭代适配器

前言 反向迭代使用相信大家都已经比较熟悉了,那我们这篇文章具体讲什么呢? ,这篇文章我们重点来讲一下反向迭代模拟实现。 那为什么我们之前不和正向迭代放在一块讲呢?...那现在大家思考一个问题:单从使用角度来看,反向迭代和正向迭代有什么区别?...其实区别好像也不是很大,就是正向迭代++是从前往后走,而反向迭代++是后往前走,那对于list来说正向++是_node = _node->_next;,那反向就应该是_node = _node...然后是不是还要提供rbeginrend啊: 那rbegin应该返回最后一个元素迭代 rend应该返回 第一个元素前一个,那对于list来说就是头结点嘛 那对应代码就是这样。...,那接下来就给大家解释一下这样做真正牛逼之处: 大家想一下,对于我们list来说,我们使用最开始我们自己方法去实现反向迭代(拷贝一份正向迭代代码,进行一些简单修改),确实也可以。

9910

【C++】STL 容器 - list 双向链表容器 ② ( list 常用 api 简介 | 首尾 添加 删除 元素 | 获取首尾元素 | 正向迭代反向迭代 )

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

16710
领券