首先,要明白使用正向迭代器(iterator)进行反向遍历是错误的用法,要不干嘛要有反向迭代器呢(reverse_iterator)。其次,根据容器的特性,遍历删除操作的用法可以分为两组,第一组是 list 和 vector,第二组是 map 和 set。 接下来,看看具体怎么个用法。 第一种情形:正向遍历删除元素 对list 和 vector 来说,它们的 e...
typedef std::reverse_iterator<iterator> reverse_iterator; 再来看reverse_iterator,继承自_Revranit, 这个类有个成员_RanIt current; 也就是说有个 iterator 类成员,即包装了一个iterator 类成员,从这个角度看,reverse_iterator 也可以算是一个适配器,利用 iterator 类的一些操作完成自身的功能。 ××× 上面介绍...
首先,要明白使用正向迭代器(iterator)进行反向遍历是错误的用法,要不干嘛要有反向迭代器呢(reverse_iterator)。其次,根据容器的特性,遍历删除操作的用法可以分为两组,第一组是 list 和 vector,第二组是 map 和 set。 接下来,看看具体怎么个用法。 第一种情形:正向遍历删除元素 对list 和 vector 来说,它们的 e...
但容器的有些成员方法只支持iterator,如果你想在反向迭代器所指的位置插入一个新元素,或者是删除反向迭代器所指的元素是不行的,因为insert方法、erase方法都不支持reverse_iterator。要完了这些操作,必须将reverse_iterator转换成iterator,再用iterator完成这些操作。 下面说明了反向迭代器与迭代器的关系,并列举了一些常用的...
reverse_iterator(Ranit x): Ranit表示随机迭代器。 值得一提的是,反向迭代器底层可以选用双向迭代器或者随机访问迭代器作为其基础迭代器。不仅如此,通过对 ++(递增)和 --(递减)运算符进行重载,使得: 当反向迭代器执行 ++ 运算时,底层的基础迭代器实则在执行 -- 操作,意味着反向迭代器在反向遍历容器; ...
我们可以调用const_reverse_iterator反向迭代器对象的base()成员,该成员会将反向迭代器变为正向迭代器。代码如下: std::string line = "FIRST,MIDDLE,LAST"; auto rcomma = std::find(line.crbegin(), line.crend(), ','); std::cout << std::string(rcomma.base(), line.cend()) << std::endl;...
头文件 中定义了四种迭代器: 插入迭代器(insert iterator):这些迭代器被绑定到一个容器上,可向容器插入元素。 流迭代器(stream iterator):这些...
reverse_iterator差异类型与迭代器差异类型相同。 该类型为迭代器特征类型名iterator_traits<RandomIterator>::pointer的同义词。 示例 有关如何声明和使用difference_type的示例,请参阅reverse_iterator::operator[]。 reverse_iterator::iterator_type 一种类型,此类型为reverse_iterator提供基础迭代器。
crbegin()/crend():获取的迭代器的类型是T::const_reverse_iterator。反向访问元素,即从最后一个元素向第一个元素遍历。不可修改对应元素,即常量访问。 从c++11开始,提供了工具函数begin()/end()。 获取容器迭代器是算法的第一步。获取后即完成了于容器的解耦。 算法的使用 标准库对容器操作提供了丰富的算法,...
比如:倒过来打印一个string 的每个字符:string s = "abc";for (string::reverse_iterator i = s.rbegin(); i != s.rend(); ++i) { cout << *i;} 当然这个代码只是最基本的用途,关于reverse_iterator如果与iterator转换,就比较不直观了,可以查阅相关书籍,如 Effective C++ ...