最近落了好多没写了,感觉已经废了。继续C++的笔记,关于range-based for loop的使用,一个C++11的标准。首先我会给出样例,然后针对gcc的报错,说明Ubuntu16.04-LTS下gcc的更新方法。

range-based for loop

C++11标准中增加了一种新的for循环的方式,称为range-based for loop,即基于范围的for循环,这个类似于python中直接进行列表索引的for循环。请看下面的样例,分别是C++和python的for循环写法,

C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
using namespace std;
int main()
{
int numArray[5] = {0, 11, 22, 33, 44};
for (int num : numArray)
cout << num << endl;
return 0;
}
python
1
2
3
4
numArray = [0, 11, 22, 33, 44]
for num in numArray:
print(num)

二者的输出结果均为如下形式,

1
2
3
4
5
0
11
22
33
44

显然,相对于C99的for循环,基于范围的这种for循环能够减少多行代码量。

g++ update

为了应用C++11/14的新标准,gcc/g++也需要做相应的更新,由于我还在Ubuntu-16.04 LTS的坑里,gcc的最高版本为5.4。如果编译时看到如下的警告,则需要对gcc进行更新。

1
warning: range-based ‘for’ loops only available with -std=c++11 or -std=gnu++11

更新方法如下,

1
2
3
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt update
sudo apt install gcc-7 g++-7

Reference