3.5 参考
3.5.1 决策
C++为进行决策提供了三种主要机制:
1. if-else,适合于本质上有两种可能性的决策。else是可选项,但如果它出现了,则必须是受if控制的语句的下一句。受控语句可以是单条语句,也可以是一个复合语句(花括号内的一个语句块)。
2. switch,允许受一个整数值控制的有多种可能性的选择。选择由关键字case标识,后面跟着一个常量整数值和一个冒号。一个选择分支的执行由下一个break或return语句或switch语句的结束花括号终止。switch语句可以包括一个由关键字default标识的包罗万象的选项。
3. 条件操作符,依赖一个控制表达式,以选择对两个表达式中的哪一个进行求值。
形式为:control-expression ? expression-for-true : expression-for-false。
机制1和机制3之间的区别在于,前者拥有控制语句,而后者则拥有控制表达式。表达式求解之后提供的值可能会被用作同一语句中更大的表达式的组成部分。而控制语句则是完整的,它没有值。下列代码片断(打算作为函数的出口的一部分使用)示范了二者在使用中的差异:

或

第一个例子使用由if-else结构选择的两个return语句,第二个例子返回一个由条件表达式选择的值。
3.5.2 循环、重复和迭代
这是三种具有非常相似含义的术语。C++为循环提供了三种主要的机制:
1. while(control-expression) action。只要控制表达式求得的值为true(或非零),就重复执行动作(action)语句(通常是包围在括号中的复合语句)。在每次重复(包括第一次)之前求解控制表达式的值。如果它的值为false(或零),则不执行动作语句,处理工作从下一条语句继续。注意,这意味着动作(action)部分的语句有时不会被执行,甚至一次也不执行。
2. do{action} while(control-expression); 在动作语句块的每次执行后,执行测试以决定是否再次执行循环。当动作必须总是要执行至少一次的时候,使用它。在其他方面,它与while循环类似。
3. for(initialization; test; termination) action。这种形式的循环大致等价于这么写:

从来都不是非得使用for语句不可(我们总是可以用while语句替代for语句)。然而,所使用的两种结构允许提供能帮助其他程序员理解我们意图的惯用法。通常当重复的次数由某个值决定时(例如当我们想要遍历许多种情况的时候),使用for语句是合乎习惯的。当我们期望重复的终点由某个其他条件(例如到达正在处理的文件的末尾)产生时,使用while循环。
使用do-while最常见的情况是,必须以某个选项获取并处理某种形式的数据,以根据当前循环的结果来获得更多的数据。
C++提供多种方式结束一个循环过程。关键字continue允许程序中止当前重复并直接转到下一次重复的测试。对for循环来说,continue立即执行终止(termination)语句,接着测试是否进行另一次重复。
break语句用于完全退出循环。换句话说,break强制执行紧接在当前循环结构后面的语句。
存在其他语句例如return,可导致循环提前终止,那只是它们被设计的行为的结果,而不是被设计用于离开循环的行为的结果,或者简单地说,它们并非专为循环场合设计。
3.5.3 C++标准库类型
这个类型提供文本类型行为。它还提供针对char值的序列的适当行为。它包含我们所期待的针对文本的功能,例如支持添加文本和比较文本的相等性。作为序列类型,它提供了C++序列的功能。序列对象知道自己的长度或大小,知道自己从哪里开始、到哪里结束,它们通常可以被索引和排序。我们将在后面的章节中学习std::string的更多功能。
std::vector是一个被C++称为类模板(class template)的实例。它提供了我们期待的大小可动态调整的数组所具有的功能。由于序列的功能很大程度上独立于序列中对象的类型,因此我们需要一种方式来指定那个功能,以使其独立于存储在序列中对象的类型之外。类模板的主要用途之一是提供这样的泛型功能。我们可以在使用时插入一系列广泛的类型。只有较少的几种类型不能与std::vector友好相处。一个类型可以实例化std::vector的基本标准是,该类型的对象必须可以被复制和赋值。换句话说,必须能够按值传递该类型的对象,且必须能够将一个该类型的值赋给一个相同类型的对象。在你学习C++现阶段,这些约束可能没有太多意义,它们的意义将会在你学完本书的教程部分时显现出来。







