for (element_declaration : range) {
// 循环体,使用 element_declaration 表示 range 中的每个元素
}
element_declaration
:这是一个新的变量,用于表示range
中的每个元素。在for
循环的每次迭代中,element_declaration
都将被设置为range
中的下一个元素。
range
:这是一个可迭代的数据结构,例如字符串、数组、向量等。for
循环将遍历range
中的每个元素。
优点:是它更加简洁和易读,特别适用于需要遍历容器或集合中的元素的情况。它隐藏了迭代器和循环索引等细节,使代码更加清晰。
#include
#include
using namespace std;
int main() {
char arc[] = "http://c.biancheng.net/cplus/11/";
//for循环遍历普通数组
for (char ch : arc) {
cout << ch;
}
cout << '!' << endl;
vector<char>myvector(arc, arc + 23);
//for循环遍历 vector 容器
for (auto ch : myvector) {
cout << ch;
}
cout << '!';
return 0;
}
程序执行结果为:
http://c.biancheng.net/cplus/11/ !
http://c.biancheng.net/!
这里有以下 2 点需要说明:
程序中在遍历 myvector 容器时,定义了 auto 类型的 ch 变量,当编译器编译程序时,会通过 myvector 容器中存储的元素类型自动推导出 ch 为 char 类型。注意,这里的 ch 不是迭代器类型,而表示的是 myvector 容器中存储的每个元素。
仔细观察程序的输出结果,其中第一行输出的字符串和 “!” 之间还输出有一个空格,这是因为新格式的 for 循环在遍历字符串序列时,不只是遍历到最后一个字符,还会遍历位于该字符串末尾的 ‘\0’(字符串的结束标志)。之所以第二行输出的字符串和 “!” 之间没有空格,是因为 myvector 容器中没有存储 ‘\0’。