Range-Based for 循环
C++为 for 提供 for range 的用法。对于 STL(vector/list/map)的遍历带来了极
大的书写便利。
(range for)语句遍历给定序列中的每个元素并对序列中的每个值执行某种操作,
其语法形式是:
for (declaration : expression)
statement</code>
expression 部分是一个对象,必须是一个序列,比方说用花括号括起来的初始值
列表、数组或者 vector 或 string 等类型的对象。这些类型的共同特点是拥有能返回迭
代器的 begin 和 end 成员。
declaration 部分负责定义一个变量,该变量将被用于访问序列中的基础元素。每
次迭代,declaration 部分的变量会被初始化为 expression 部分的下一个元素值。确
保类型相容最简单的办法是使用 auto 类型说明符。
#include <iostream>
using namespace std;
int main(){
int arr[10] = {1,2,3,4,5,6,7};
for(auto &i: arr)
{
cout<<i<<endl;
}
string str = "china"; //OK
char str[] = "china"; //OK
char * str = "china"; //ERROR
for(auto & ch: str)
{
cout<<ch<<endl;
}
return 0;
}
for STL
#include <iostream>
#include <vector>
using namespace std;
int main(){
// 定义一个长度为10的数组,并初始化前7个元素为1, 2, 3, 4, 5, 6, 7,其余元素默认为0
int arr[10] = {1, 2, 3, 4, 5, 6, 7};
// 使用数组arr的首地址和尾地址(arr+10)初始化一个vector<int>,即vi
// arr是数组的首地址,arr+10表示数组的尾地址(即数组最后一个元素的下一个地址)
vector<int> vi(arr, arr + 10);
// 定义一个vector<int>的迭代器it
vector<int>::iterator it;
// 使用迭代器遍历vector<int> vi
for (it = vi.begin(); it != vi.end(); ++it) {
// 输出迭代器指向的元素值,并换行
cout << *it << endl;
}
for (auto & i : vi){
i+=5;
}
for (auto i : vi){
cout<<i<<endl;
}
return 0;
}
#include <iostream>
#include <map>
using namespace std