《C++ primer》英文第五版阅读笔记(二十二)——循环语句

循环语句
C++中的循环语句有while,for,do...while。


一、while语句
while语句只要在条件为真的情况下,就一直循环执行目标语句。
语法:
while(condition)
statement;

1.condition不能为空。

2.condition条件可以是一个表达式或者一个初始化的变量声明。通常,条件本身或者循环体必须要能够改变这个表达式的值。否则,可能会进入死循环,循环不可能停止。

3.注意:在while条件condition中或while循环体中创建的变量在每一次迭代的时候都会被销毁。

4.当我们不知道具体的迭代的次数时通常会使用while循环,比如循环输入数据。当循环结束后,如果想使用循环控制变量时while也是很有用的。


二、传统的for语句
语法形式:
for(init-statement;expression)
statement;
1.for和括号里的那部分常被称为for的头部。

2.init-statement必须是一个声明语句,一个表达式语句或者一个空语句。这些语句都以分号;结尾。


所以它的语法结构也可以是下面的形式:

for(initializer;condition;expression)
statement;

3.通常,init-statement用来对一个在循环过程中改变的值进行初始化或者赋值操作。

4.condition是循环的控制条件。只要condition为真,则statement就会被执行。

5.expression通常用来修改在init-statement中被初始化的值,并且condition用来测试这个值。

6.expression在循环的每一个迭代之后都会被计算。

7.通常statement可以是一个语句或者复合语句。

8.注意:在for的头部中定义的对象只在for的循环体中是可见的。

9.和其它的声明一样,init-statement中也可以定义多个对象。然而,init-statement可能只是一个声明语句。因此,所有变量必须有相同的基类型。

10.在for头部中init-statement,condition,expression任意一部分都可以省略。

11.当不必要进行初始化的时候,在init-statement处可以使用一个空语句。

12.省略condition相当于在condition处写上true。

13.当省略了expression时,在条件condition中或者循环体中必须能够控制循环的继续进行。


三、range for语句
新标准中介绍了一个更简单的for语句,它能够用来迭代容器或其它序列中的元素。
语法:
for(declaration : expression)

statement

1.expression必须是一个序列,比如大括号初始化列表,一个数组,或者是一个类型的对象,比如vector或string这样的有begin和end成员的能返回迭代器的类型。

2.declaration定义了一个变量。序列里面的每一个元素必须能够转换为这个变量的类型。确保类型匹配的最简单的方式就是使用auto。这样编译器就会为我们自动检测类型。

3.如果我们想要改变序列中元素的值,那么循环变量必须是引用类型。

4.在每一次迭代中,当statement语句执行完之后,控制变量都被序列中下一个元素定义和初始化。statement可以是一个语句或者一个块。当所有元素都被处理后循环结束。


5.range for是由传统的for循环转化来的:
for(auto beg=v.begin(),end=v.end(); beg!=end; ++beg) {
......
}
这样我们就可以知道range for是如何工作的。之前我们说过不能在range for中添加或者移除元素,这是因为在range for中,end()的值被存起来了,如果对序列进行添加或移除元素,end的值可能就会是无效的。


四、do while循环
do while循环和while循环类似,但是它的条件是在循环体执行完一次之后才被测试的。不管条件是真是假,都会至少执行一次循环体。
语法:
do
statement
while(condition) ;

1.do while以条件的括号后面的分号;结尾。

2.条件condition不能为空。条件为假,循环终止。

3.在条件condition中使用的变量必须在do while的循环体外进行定义。

4.由于条件是在执行完一条语句或者一个语句块之后才进行执行,所以do while循环不允许在条件condition内部定义变量。

5.如果允许在condition内部定义变量的话,则在这个变量定义之前就对这个变量进行了使用!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值