C++范围for

Posted 流浪孤儿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++范围for相关的知识,希望对你有一定的参考价值。

目录

1、基于范围的for循环(C++11)

2、范围for的使用条件

for循环迭代的范围必须是确定的

3、for循环迭代的范围必须保证不能被改变



1、基于范围的
for循环(C++11)

范围for的语法(语法糖)

C++98中如果要遍历一个数组,可以按照以下方式进行:

void TestFor()

{

    int array[] = { 1, 2, 3, 4, 5 };

    for (int i = 0; i < sizeof(array) / sizeof(array[0]); ++i) array[i] *= 2;

    for (int* p = array; p < array + sizeof(array) / sizeof(array[0]); ++p)

       cout << *p << endl;

}

对于一个有范围的集合而言,由程序员来说明循环的范围是多余的,有时候还会容易犯错误。因此C++11中引入了基于范围的for循环。for循环后的括号由冒号分为两部分:第一部分是范围内用于迭代的变量, 第二部分则表示被迭代的范围

void TestFor()

{

int array[] = { 1, 2, 3, 4, 5 };

for(auto& e : array)//e会以引用的方式遍历array一遍,

e *= 2;

for(auto e : array)

cout << e << " ";

return 0;

}

注意:与普通循环类似,可以用continue来结束本次循环,也可以用break来跳出整个循环 

 

2、范围for的使用条件

for循环迭代的范围必须是确定的

对于数组而言,就是数组中第一个元素和最后一个元素的范围;对于类而言,应该提供beginend的方法,beginend就是for循环迭代的范围。

注意:以下代码就有问题,因为for的范围不确定

void TestFor(int array[])//数组传参会退化为指针,这里是指针不是数组

{

    for (auto& e : array)

       cout << e << endl;

}

​​​​​​​迭代的对象要实现++和==的操作。(关于迭代器这个问题,以后会讲,现在大家了解一下就可以了)

3、for循环迭代的范围必须保证不能被改变

 

以上是关于C++范围for的主要内容,如果未能解决你的问题,请参考以下文章

C++中“for”循环的范围规则与C中不同? [复制]

c++、java、C#之间的for循环初始化变量范围

为啥需要两个范围 for 循环来更改 C++ 中向量的这些元素?

使用范围 for 循环而不使用 auto 关键字 c++

如何使用范围将这个 python for 循环转换为 C++?

数组在 C++ 中包含来自 python 的范围