迭代器 iterator, const_iterator, const iterator

迭代器iterator的作用类似于指针。

(1)iterator只有针对制定<类型>的容器才有效。例如:

  1. vector<int> vec;
  2.  
  3. vector<int>::iterator itr;

对于vec来说,itr.begin()指向的是vec的第一个元素。Itr.end()指向的是vec的最后一个元素的下一个元素(作为哨兵,实际不存在)。可用itr.begin() == itr.end()来判断容器是否为空。

像指针一样,itr可以++,*itr表示解引用,即表示容器内被itr指向的元素。

(2)const_iterator为一种迭代器,这种迭代器可以读取其指向的内容,也可以自增,但是不可以对其指向的内容进行“写“操作。

例如:

  1. vector<int>::const_iterator constItr = vec.begin();
  2.  
  3. cout<< *constItr << endl; //正确
  4.  
  5. constItr++;//正确
  6.  
  7. *constItr = ;//错误!

另外,由于const_iterator只可读取其指向的内容,所以可以用const_iterator作为const 的 容器的迭代器。

(3)容易混淆的 由const 修饰符修饰的iterator

其几乎无作用。

与普通的iterator一样,其可以解引用,并可以修改其指向的内容。但迭代器本身不可被修改,因为它由const修饰。

所以该iterator不能自增,其只能为第一次赋予的值,故并无明显的作用。

P.S:合法的指针运算:

  • 相同类型指针之间的赋值运算
  • 指针同整数之间的加减法运算
  • 相同类型指针之间的减法和比较运算
  • 将指针赋值为0 或 指针与0之间的比较运算

VC++ 迭代器 iterator, const_iterator, const iterator的更多相关文章

  1. iterator与const_iterator及const iterator区别

    如果你传递过来一个const类型的容器,那么只能用const_iterator来遍历.  C++ Code  12345   void Method(const vector<int> v ...

  2. const 迭代器和 const_iterator (vector/set/map)

    vector: 如同一般复合类型一样,vector 迭代器也可以声明成: const vector<int>::iterator it1 = v.begin(); vector<in ...

  3. :迭代器模式1:Iterator

    //今天一口气把这一章前半部分的iterator例子的所有代码写完,涉及到了不少指针的内容,竟然一次性编译通过.... //Iterator与Menu之间应该不是has a的关系,先这样着吧. #if ...

  4. 迭代器类型:iterator & const_iterator

    vector<int> ivec{1, 3, 4, 1, 3, 4}; vector<int>::iterator iter; // iter能读写vector<int& ...

  5. C++ ------ const迭代器 和 const_iterator的区别

    const迭代器,顾名思义,就是不能改变的迭代器,是常量,其性质是由const决定的.比如说我们这样定义一个const迭代器. vector<,); const vector<int> ...

  6. [Swift]LeetCode173. 二叉搜索树迭代器 | Binary Search Tree Iterator

    Implement an iterator over a binary search tree (BST). Your iterator will be initialized with the ro ...

  7. [Swift]LeetCode341. 压平嵌套链表迭代器 | Flatten Nested List Iterator

    Given a nested list of integers, implement an iterator to flatten it. Each element is either an inte ...

  8. C++泛型编程(1)--自己实现C++迭代器/遍历器 iterator

    1.原理 迭代器又称为遍历器,用于访问容器中的数据,迭代器旨在算法和容器之间搭建访问的桥梁,从而使算法和数据分离,不用关心数据具体的存储细节.具体的原理描述请参考以下两个博客: [1].C++迭代器 ...

  9. 二叉查找树迭代器 · Binary Search Tree Iterator

    [抄题]: 设计实现一个带有下列属性的二叉查找树的迭代器: 元素按照递增的顺序被访问(比如中序遍历) next()和hasNext()的询问操作要求均摊时间复杂度是O(1) 对于下列二叉查找树,使用迭 ...

随机推荐

  1. C语言函数指针实验

    上次看Atmel的示例工程,发现人家使用了函数指针的结构体(函数指针结构体).感叹人家的C语言功夫审核,自己费劲还是只能读懂的份.不过,函数指针确实好用.今天就试试这个超牛的东西.Now let's ...

  2. oracle like模糊查询

    简单的方式,使用"%" 和 "_" 字符匹配操作可以使用通配符 "%" 和 "_": %:表示任意个字符,包括零个: _ ...

  3. MVC4中 访问webservice 出现无法找到资源的错误

    出现这个情况,是mvc将webservice.asmx解析成了控制器,下面先将这个控制器忽略 继续访问出现这样的错误: 下面修改配置文件 访问成功

  4. 彻底搞定char/wchar_t/unicode

    彻底搞定char/wchar_t!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! (2013-07-17 10:18:28) 转载▼     从char/wchar_t到TCHAR(1) ...

  5. 每天一个 Linux 命令(18):locate 命令

    locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案.其方法是先建立一个包括系统内所有档案名称及路径的数据库,之后当寻找时就只需查询这个数据库,而不必实际深入档案系统之中了.在一般的 di ...

  6. 【Linux编程】关于tcp_time_stamp

    今天看了一下cubic中使用到的tcp_time_stamp变量,往上查到的描述如下: 定义: include/net/tcp.h, line 707 #define tcp_time_stamp ( ...

  7. Python-Numpy函数-tile函数

    tile函数位于python模块 numpy.lib.shape_base中,他的功能是重复某个数组.比如tile(A,n),功能是将数组A重复n次,构成一个新的数组,我们还是使用具体的例子来说明问题 ...

  8. LeetCode 374. Guess Number Higher or Lower

    We are playing the Guess Game. The game is as follows: I pick a number from 1 to n. You have to gues ...

  9. C#构造函数在继承时必须要求与父类型构造函数入参相同怎么办?

    摘要 我们都知道,C#中,在类型继承时,由于构造子类必须先构造其父类型的内容,因此,必须子类型的构造函数中调用父类型的构造函数(无参数的不需要显式声明). 但是往往我们会出现,子类型本身的构造函数大于 ...

  10. jQuery MiniUI开发系列之:创建组件对象

    jQuery MiniUI可以使用Javascript和Html两种方式来创建对象. 1)Javascript创建对象 使用JavaScript创建对象,是最基本的方式,有如下几个要点: 1)使用ne ...