C++学习:范围for(range for)语句

语法

范围for(range for)语句遍历给定序列中的每个元素并对序列中的每个值执行某种操作,其语法形式是:

    for (declaration : expression)
        statement

其中:

expression部分是一个对象,必须是一个序列,比方说用花括号括起来的初始值列表、数组或者vector或string等类型的对象。这些类型的共同特点是拥有能返回迭代器的begin和end成员

declaration 部分负责定义一个变量,该变量将被用于访问序列中的基础元素。每次迭代,declaration部分的变量会被初始化为expression部分的下一个元素值。确保类型相容最简单的办法是使用auto类型说明符

虽然我们通常称new T [ ]分配的内存为“动态数组”,但是要记住我们所说的动态数组并不是数组类型,这是很重要的。当用new分配一个数组时,我们并未得到一个数组类型的对象,而是得到一个数组元素类型的指针。由于分配的内存并不是一个数组类型,因此不能对动态数组调用begin或end。出于相同的原因,也不能用范围for语句来处理动态数组中的元素。

Example 1

使用范围for语句和ispunct函数来统计string对象中标点符号的个数:

size_t cntPunct(string s) {
    decltype(s.size()) punct_cnt = 0; // punct_cnt 的类型和s.size()的返回类型一样
    for (auto c : s)
        if (ispunct(s))
            ++punct_cnt;

    return punct_cnt;
}

Example 2

如果想要改变expression对象中的值,必须把循环变量定义成引用类型。使用这个引用,我们就可以改变它绑定的元素。

将字符串改写为大写字母:

void string_toupper(string &s) {
    for (auto &c : s)
        c = toupper(c);
}

Example 3

如果我们既想用引用,又不想改变原始值,那么可以用const 引用。

打印字符串:

void string_print(string &s) {
    for (const auto &c : s)
        std::cout << c << " ";
}


参考文献:

《C++ Primer(第五版)》

时间: 2024-08-12 15:04:41

C++学习:范围for(range for)语句的相关文章

Javascript 学习笔记 2: 标识语句

可以在任何语句声明之前使用唯一标识(identifier)和冒号(:)用来标记该语句: identifier: statement 这样,你可以在程序的任何其他地方通过标识来使用这个语句.即使在语句内部也可以使用该语句的标识(例如:循环语句和条件语句).当在一个循环语句前添加一个标识,你可以在语句内部通过break 标识来退出当前循环,也可以通过continue标识来继续执行该语句.例如: mainloop: while(token != null) { // Code omitted... c

Guava学习笔记:Range

Guava学习笔记:Range 转载:http://www.cnblogs.com/peida/p/Guava_Range.html 在Guava中新增了一个新的类型Range,从名字就可以了解到,这个是和区间有关的数据结构.从Google官方文档可以得到定义:Range定义了连续跨度的范围边界,这个连续跨度是一个可以比较的类型(Comparable type).比如1到100之间的整型数据. 在数学里面的范围是有边界和无边界之分的:同样,在Guava中也有这个说法.如果这个范围是有边界的,那么

oracle菜鸟学习之 复杂的更新语句使用

oracle菜鸟学习之 复杂的更新语句使用 实例与答案 问题:表T1里有a,b,c...N个字段,表T2里有a,b,c三个字段,然后想在T1中"c"与表T2中"c"相同的情况下,从表T2中将a,b覆盖表T1中的a,b,怎么做? 实验表: create table T1(a int,b int,c int,d int,e int); create table T2(a int,b int,c int); insert into T1 values(1,2,3,4,5)

MySQL学习——有关表的操作语句

MySQL学习——有关表的操作语句 摘要:本文主要学习了使用DDL语句对表进行操作的方法. 创建表 语法 1 create table 表名 [表定义选项] [表选项] [分区选项]; 表定义选项 用来创建定义表的结构,由列名(col_name).列的定义(column_definition)以及可能的空值说明.完整性约束或表索引组成. 实例 1 create table test ( 2 id int(11) not null comment '编号', 3 name varchar(50)

MySQL学习——有关数据库的操作语句

MySQL学习——有关数据库的操作语句 摘要:本文主要学习了使用DDL语句对数据库进行操作的方法. 创建数据库 语法 1 create database [if not exists] 数据库名 2 [default] character set 字符集名 3 [default] collate 校对规则名; 实例 1 mysql> create database if not exists demo 2 -> default character set utf8 3 -> defaul

ython 学习笔记(一)语句,变量,函数

今天抽时间看了一下python.感觉很好,它与编译性语言不同.c,c++,java,c# 等都是编译性语言,也就是需要先进行编译,然后 在链接,才生成二进制可运行文件(java,C#除外,需要虚拟机才可以运行),但是也需要编译. python 是一种典型的解释性语言.他的最大的特点就是类似于脚本语言,例如:Shell编程,js,等,不需要编译. 今天学得知识为python的基本语法:包括:语句,定义变量,定义函数.下面进行对所学习的内容进行一下总结,以便以后能够温故 而知新 . 语句: 首先介绍

Python 学习笔记(一)语句,变量,函数

今天抽时间看了一下python.感觉很好,它与编译性语言不同.c,c++,java,c# 等都是编译性语言,也就是需要先进行编译,然后 在链接,才生成二进制可运行文件(java,C#除外,需要虚拟机才可以运行),但是也需要编译. python 是一种典型的解释性语言.他的最大的特点就是类似于脚本语言,例如:Shell编程,js,等,不需要编译. 今天学得知识为python的基本语法:包括:语句,定义变量,定义函数.下面进行对所学习的内容进行一下总结,以便以后能够温故 而知新 . 语句: 首先介绍

Python学习:5、if语句,while语句,函数以及商城示例

条件控制语句 if语句 简单if判断语句,当if后面的条件为真的时候,执行print('yes'),否则执行else里面的语句,print('No') if True: print('yes') else: print('No') 多次判断 首先判断pd是否大于零,否则判断pd是否小于零 pd = input('请输入数字:') pd = int(pd) #使用input拿到用户输入的值得类型都是字符串 if pd > 0: print('输入的为正值') elif pd < 0: print

python学习笔记二:if语句及循环语句,断点,模块,pyc

if语句 注意:语句块中的内容要强制缩进,否则出错.IndentationError,缩进错误 所有代码,如果是顶级的,必须顶格写,前面不能有空格 if - : - elif - : - else: - while语句 while -: - else: - for语句 for i in range(10)--i默认0,步长默认1,最大为9 for i in range (0,2,10)--从0开始,步长为2,最大为8 for  i   in range(-): - else: - break--

MySql学习 (一) —— 基本数据库操作语句、三大列类型

在使用MySql的时候,基本都是用图形化工具,如navicat.最近发现连最基本的创建表的语法都快忘了... 所以,想要重新系统性的学习下MySql,为后面学习MySql的一些高级查询,MySql性能和SQL语句的优化等打个基础. 用博客来记录下学习的过程,方便以后查阅和加强记忆.有错误的地方还请指出! 一.MySql的基本操作命令 注: <>表示参数.[]表示可选项 连接数据库:mysql> mysql -u<username> -p<password>; 显示