C++ Primer第五章!
'''
include "stdafx.h"
include
include
include
include
include
using namespace std;
int main()
{
//空语句
; //某些语法上需要语句,但是逻辑上不需要,则需要空语句。使用空语句时应该加上注释,便于理解!
//复合语句,也被称为块。一个块就是一个作用域。块不以分号作为结束!
{
;
}
//条件语句
const vector scores = { "F","D","C","B","A","A++" };
double grade = 70;
if (grade < 60)
cout << scores[0] << endl;
else
{
cout << scores[(grade - 50) / 10];
} //if语句还可以进行多层嵌套
map cnt = { {'a',0},{ 'e',0 } ,{ 'i',0 } ,{ 'o',0 } ,{ 'u',0 } };
char ch;
int numbers_cnt = 0;
while (++numbers_cnt <= 6 && cin>>ch)
{
switch (ch)
{
case 'a': //case标签必须为整型常量表达式
++cnt.at(ch);
break; //break退出当前循环,如果没有加break,则最好加一段注释说清楚程序的逻辑
case 'e':
++cnt.at(ch);
break;
case 'i':
++cnt.at(ch);
break;
case 'o':
++cnt.at(ch);
break;
case 'u':
++cnt.at(ch);
break;
default: //如果没有任何一个case标签能够匹配上,则程序将执行default标签。
break;
}
}
auto map_cnt = cnt.cbegin();
while (map_cnt != cnt.cend()) //使用迭代器遍历map容器
{
cout << map_cnt->first << ":" << map_cnt->second << endl;
++map_cnt;
}
int i_swich = 2;
switch (i_swich) //在switch中定义变量,应该避免控制流跨过变 量的初始化行为!
{
case 1:
//string file_name; 错误行为,控制流可能绕过file_name隐式初始化的变量
//int ival = 0; 错误行为,控制流可能绕过ival显示初始化的变量
int jval; //正确,只声明,为初始化!
break;
case 2:
jval = 0;
//cout << file_name.empty();
default:
break;
}
//迭代语句,重复执行操作直到满足某个条件为止
//while(cin>>i) 重复读取数据,直到读取失败
//for(decltype(i) j=0;j<5;++j) for 循环
//for(auto i:cnt) for范围,适用于容器、数组等
vector v = { 1,2,3,4,5 };
for (auto &i : v)
{
i = i * 2;
}
for (auto beg = v.begin(); beg != v.end(); ++beg)
{
auto &r = *beg;
r = r * 2;
}
auto beg = v.cbegin();
while (beg != v.cend())
{
cout << *beg << "-";
++beg;
}
cout << endl;
//跳转语句, break/continue/goto/return
//break,跳出最近的循环;continue,跳出for、while本次循环且进入下次循环;goto,跳至带标签语句后,不要使用它!
//try语句块和异常处理
//throw表达式,引发一个异常;try语句块,处理异常代码
try {
throw runtime_error("Error!"); //抛出异常,并处理异常。检查,抛出,捕获!
}
catch (runtime_error err) //runtime_error是中定义的异常类,必须使用const char*提供初始化。
{
cout << err.what() << endl; //如果一段程序没有try语句块且发生了异常,系统会调用terminate函数并终止当前程序的执行。
}
cin.ignore();
return 0;
}
'''
//本章介绍了C++中常见的语句结构,顺带了说明了C++如何进行异常处理!