传统for语句
for(init_statement;condition;expression)
statement
init_statement必须是以下三种形式的一种:声明语句、表达式语句或者空语句。
一般情况下,init_statement负责初始化一个值,这个值将随着循环的进行而改变。condition作为循环控制的条件,只要condition为真,就执行一次statement。如果condition第一次的求值结果就是false,则statement一次也不会执行。expression负责修改init_statement初始化的变量,这个变量正好就是condition检查的对象,修改发生在每次循环迭代之后。statement可以是一条单独的语句也可以是一条复合语句。
下面写一段循环向vector容器(vector容器详情)中存入数据的代码:
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int>v;
for (int i = 0; i < 10; i++)
{
v.push_back(i);
}
//遍历打印
for (auto it = v.begin(); it != v.end(); it++)
{
cout << *it << " ";
}
cout << endl;
system("pause");
return 0;
}
其中传统for循环语句中的初始化语句,条件语句以及表达式可以为空语句;
例如上面的语句就可以写成下面的形式将表达式放在循环体内.
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int>v;
for (int i = 0; i < 10;)
{
v.push_back(i);
i++;
}
//遍历打印
for (auto it = v.begin(); it != v.end(); )
{
cout << *it << " ";
it++;
}
cout << endl;
system("pause");
return 0;
}
这里强调
for( ; ; );
语句可以为空语句但是;号不能省略。
范围for语句
c++11引入了更简单的for语句;这种语句可以遍历容器或者其他序列的所有元素。范围for的语法形式是:
for(declaration:expression)
statement
expression表示的必须是一个序列,比如数组、vector或string等类型的对象,这些类型的共同特点拥有返回迭代器的begin和end成员。
declaration定义一个变量,序列中的每个元素都得能转换成该变量的类型。确保类型相容最简单的办法是使用auto类型说明符。
每次迭代都会重新定义循环控制变量,并将其初始化成序列中的下一个值,之后才会执行statement。像往常一样,statement可以是一条单独语句,也可以是一个块。所有元素都处理后才会终止循环。
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int>v;
for (int i = 0; i < 10;)
{
v.push_back(i);
i++;
}
//遍历打印
for (auto r: v)
{
cout << r << " ";
}
cout << endl;
system("pause");
return 0;
}
用范围for就可以对string中字符进行处理
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s="hello world!";
for (char &c : s)
{
cout << c+2 << " ";
}
cout << endl;
system("pause");
return 0;
}