迭代器分为两种:一种是iterator,另一种是const_iterator。
两者都可进行访问容器中的元素,不同之处是:
(1)const_iterator类型只能用于读取容器内的元素,不能更改其值;而iterator可以更改其值。
(2)对const_iterator类型进行解引用时,返回值是一个const值,不允许对其解引用赋值。
另外不要把const_iterator对象与const的iterator对象混淆,其不同之处是:
(1)声明const迭代器时必须初始化,一经初始化后就不能改变它的值,但是可以改变其所指对象的值。
(2)const_iterator对象可以改变其值,但是不允许改变其所指对象的值(因为对其进行解引用时,返回的是const值,不允许对其重新赋值)。

iterator类型迭代器的代码片段如下:

vector<string> vec1;
for(vector<string>::iterator iter = vec1.begin();iter != vec1.end(); iter++)
{
cout<<*iter<<endl;
*iter = "";//ok
}

const_iterator类型迭代器的代码片段如下:

for(vector<string>::const_iterator iter = vec1.begin();iter != vec1.end(); iter++)
{
cout<<*iter<<endl;
*iter = "";//error,because return value is const
}

const与const_iterator使用区别的代码片段如下:

vector<string>::const_iterator iter1 = vec1.begin();
*iter1 = "";//error, *iter1 is const
iter1++;//ok const vector<string>::iterator iter2 = vec1.begin();
*iter2 = "";//ok
iter1++;//error,cannot change const value

后续更新中...

C++学习基础三——迭代器基础的更多相关文章

  1. 学习笔记三:基础篇Linux基础

    Linux基础 直接选择排序>快速排序>基数排序>归并排序 >堆排序>Shell排序>冒泡排序=冒泡排序2 =直接插入排序 一.Linux磁盘分区表示 Linux中 ...

  2. Java基础学习笔记三 Java基础语法

    Scanner类 Scanner类属于引用数据类型,先了解下引用数据类型. 引用数据类型的使用 与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有一个相对固定的步骤或格式. 数据类型 变量名 ...

  3. Swift语言学习(三)基础操作符

    操作符是用于检测.更改或者组合值的特殊符号或短语.例如,加法操作符 (+) 将两个数字加到一起 (如 let i = 1 + 2).更复杂的例子包括逻辑与操作符 && (如 if en ...

  4. Python学习(三)基础

    一.函数与模块 定义函数: 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 (). 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数. 函数的第一行语句可以选择性地使用 ...

  5. Scrapy基础(三) ------xpath基础

    xpath简介 1,使用路径表达式在xml和html中解析  2,包含标准函数路(所有库支持的xpath语法一致)      3,W3C标准 节点: <body> 第一个节点: <h ...

  6. linux基础三---网络基础&软件包管理

    一 ifconfig:显示所有正在启动的网卡的详细信息或设定系统中网卡的IP地址. ifconfig eno16777736 down/up   关闭/开启 eno16777736 网卡 ifconf ...

  7. 【转载】salesforce 零基础开发入门学习(三)sObject简单介绍以及简单DML操作(SOQL)

    salesforce 零基础开发入门学习(三)sObject简单介绍以及简单DML操作(SOQL)   salesforce中对于数据库操作和JAVA等语言对于数据库操作是有一定区别的.salesfo ...

  8. Python学习-第三天-面向对象编程基础

    Python学习-第三天-面向对象编程基础 类和对象 简单的说,类是对象的蓝图和模板,而对象是类的实例.这个解释虽然有点像用概念在解释概念,但是从这句话我们至少可以看出,类是抽象的概念,而对象是具体的 ...

  9. JavaScript 基础 学习(三)

    JavaScript 基础 学习(三) 事件三要素 ​ 1.事件源: 绑定在谁身上的事件(和谁约定好) ​ 2.事件类型: 绑定一个什么事件 ​ 3.事件处理函数: 当行为发生的时候,要执行哪一个函数 ...

随机推荐

  1. Android Studio Tips and Tricks

    Android Studio Delete Module 1.选中Module右击,选择 Open Module Settings,打开Project Structure 窗空.(或者选中Module ...

  2. 利用Arduino快速制作Teensy BadUSB

    0×00 介绍 本文想以较简单的方式,叙述Arduino版BadUSB的制作过程.我知道在这之前已经有很多前辈都写过相关的文章,但小白可能还有点迷糊,所以这篇文章是快速带大家入门了解,我也是菜B大神不 ...

  3. 高通CP Crash分析调试

    1. 转换tlcore文件 获取 EBICS0.BIN tl2elf --qconly tlcore 2.使用T32 命令把Riva的dump信息从EBICS0文件分离出来 data.load.BIN ...

  4. 黑马程序员——【Java基础】——GUI(图形用户界面)

    ---------- android培训.java培训.期待与您交流! ---------- 一.概述 1.GUI(GraphicalUser Interface):又称图形用户界面,是计算机用户与计 ...

  5. [转]Centos 6.5 安装 Scrapy 0.22.2成功

    0. python -V               (此时显示为2.6.6) 1. yum -y update  2. yum groupinstall -y development  3. yum ...

  6. 第三个Sprint冲刺第二天

    讨论地点:宿舍 讨论成员:邵家文.李新.朱浩龙.陈俊金 讨论问题:强化答案讲解功能

  7. mysql给其他用户权限访问我的数据库

    先执行这条语句,给用户权限 grant all privileges on *.* to root@"221.221.185.23" identified by "gyr ...

  8. EDIUS中调整YUV曲线的教程

    本篇文章重点地讲解了EDIUS调整YUV曲线的方法,是一篇很详细的EDIUS教程文章,它能帮助新手小伙伴快速掌握EDIUS视频编辑软件的某一知识点.相信坚持学习小编推荐的教程文章,你们会很快入门EDI ...

  9. [solr] - 索引数据删除

    删除solr索引数据,使用XML有两种写法: 1) <delete><id>1</id></delete> <commit/> 2) < ...

  10. 【java消息格式化】使用MessageFormat进行消息格式化

    主要介绍了: 消息格式化的基本使用: 格式化:匹配数字: 格式化:匹配日期: 格式化:匹配时间: 格式化:多次匹配: MessageFormat用来格式化一个消息,通常是一个字符串.MessageFo ...