首页 > 编程语言 >【介绍】C++五种迭代器

【介绍】C++五种迭代器

时间:2023-04-24 15:57:21浏览次数:40  
标签:const 迭代 Iterator iter2 iter1 iter 五种 C++

目录

1. 输入迭代器(Input Iterator):

2. 输出迭代器(Output Iterator):

3. 前向迭代器(Forward Iterator):

4. 双向迭代器(Bidirectional Iterator):

5. 随机访问迭代器(Random Access Iterator):


 

1. 输入迭代器(Input Iterator):

支持单次读取和前进;即只能遍历一遍集合,并且只能向前跳转。
- 递增操作(Increment):++iter
- 解引用操作(Dereference):*iter
- 比较操作(Equality Comparable):iter1 == iter2、iter1 != iter2
- const支持:同时支持const和non-const迭代器,因为输入流不应该改变容器元素。


2. 输出迭代器(Output Iterator):

 

支持单次写入和前进;即只能遍历一遍集合,并且只能向前跳转。
- 递增操作(Increment):++iter
- 解引用操作(Dereference):*iter
- 引用操作(Reference):iter = val
- const支持:不支持const迭代器,因为输出流总是允许修改。



3. 前向迭代器(Forward Iterator):

 

支持读取和写入,多次迭代,和向前跳转。
- 递增操作(Increment):++iter
- 解引用操作(Dereference and Reference):*iter、iter->member
- 比较操作(Equality Comparable):iter1 == iter2、iter1 != iter2
- const支持:同时支持const和non-const迭代器。



4. 双向迭代器(Bidirectional Iterator):

 

支持前向迭代器的所有操作,并支持向后跳转。
- 递减操作(Decrement):--iter
- const支持:同时支持const和non-const迭代器。



5. 随机访问迭代器(Random Access Iterator):

支持双向迭代器的所有操作,并支持随机跳转和算术运算。
- 递增操作(Increment):++iter
- 递减操作(Decrement):--iter
- 加法和减法操作(Arithmetic):iter + n、iter - n、iter1 - iter2
- 解引用操作(Dereference and Reference):*iter、iter->member、iter[n]
- 比较操作(Comparison):iter1 < iter2、iter1 > iter2、iter1 <= iter2、iter1 >= iter2
- const支持:同时支持const和non-const迭代器。

标签:const,迭代,Iterator,iter2,iter1,iter,五种,C++
From: https://www.cnblogs.com/xuyd/p/17349731.html

相关文章

  • C++中struct和class的区别 || C++中const和static的作用
    struct和class不同点两者中如果不对成员不指定公私有,struct默认是公有的,class则默认是私有的class默认是private继承,而struct默认是public继承  static不考虑类的情况隐藏。所有不加static的全局变量和函数具有全局可见性,可以在其他文件中使用,加了之后只能在该......
  • C++ 学习 第八天
    今日内容:匿名函数 动态数组 匿名函数:lambda表达式:捕获列表:[捕获列表]{cout<<endl;}捕获列表捕获的是父作用域下的属性,如果[]为空,默认不补货 值捕获父作用域下所有的属性,只捕获值,不捕获属性本身(只读不写)值捕获父作用域下所有的函数,但是引用捕获父作用域下......
  • 13、c++使用单例模式实现命名空间函数
    本案例实现一个test命名空间,此命名空间内有两个函数,分别为getName()和getNameSpace();声明命名空间及函数namespacetest{conststd::string&getName()和();conststd::string&getNameSpace();}命名空间内实现单例类实现一个单例类,构造函数要为private,自身对......
  • 基于C++研究高并发内存池
    访问【WRITE-BUG数字空间】_[内附完整源码和文档]内存池:程序预先向系统申请一大块足够的内存,此后,当系统需要申请内存的时候,不是直接向操作习题申请,而是向内存池中申请,当释放的时候,不返回给操作系统,而是返回给内存池,当程序退出时,内存池才将申请的内存真正释放高并发内存池借鉴tcmall......
  • C++并发之fence
    intx=0;inty=0;intr0,r1;//cpu1voidf1(){x=1;std::atomic_thread_fence(std::memory_order_acquire);r0=y;}//cpu2voidf2(){y=1;std::atomic_thread_fence(std::memory_order_acquire);r1=x;} fence......
  • C++第四章课后习题4-8
    定义一个dog类,包含的age,weight等属性,以及对这些属性的操作方法,实现并测试这个类。1#include<iostream>2usingnamespacestd;3classDog{4private:5intage,weight;6public:7voidsetdog(inta,intb)8{9......
  • c++打卡十三天
    一、问题描述。 二、设计思路①、首先我们是用二分法解决这个问题。二分法是指在一个有序数组中,我们通过目标数与数组中间值的比较,对半缩小数组范围,比如一个升序数组中间值是4,当我们寻找一个比四小的数字时,只需要从首位和中间值中寻找,然后继续确定新的中间值,长此以往,就可以有......
  • 6牛顿迭代法
    #include<stdio.h>#include<math.h>floatsolution(floata,floatb,floatc,floatd){ floatx0,f,fd,h; floatx=1.5; do { x0=x; f=a*x0*x0*x0+b*x0*x0+c*x0+d; fd=3*a*x0*x0+2*b*x0+c; h=f/f......
  • 初学者代码训练Day6(c/c++)
    抓交通肇事犯要求一辆卡车违反交通规则,撞人后逃跑。现场有三人目击该事件,但都没有记住车号,只记下车号的一些特征。甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的,但与前两位不同;丙是数学家,他说:四位的车号刚好是一个整数的平方。请根据以上线索求出车号。流程图代......
  • 【c&c++】vector 详解(C++)
    C++STL中的verctor好比是C语言中的数组,但是vector又具有数组没有的一些高级功能。与数组相比,vector就是一个可以不用再初始化就必须制定大小的边长数组,当然了,它还有许多高级功能。1.头文件#include<vector>2.初始化 如果vector的元素类型是int,默认初始化为0;如果vector元......