让C++也用上Python中的for...in...循环
这两天看《C++ Primer》才发现原来C++11标准新增了这么多内容,尤其醒目的就是auto类型说明符和范围for语句啦!
最开始接触Python简直被for...in...
美呆,再也不用每次便利都造轮子自己写个函数了,就像这样:
a = [1, 2, 3, 4]
for item in a:
print(item)
这里只要内容是可数的,如string
、tuple
、list
、dict
都能迭代遍历出来。
在C++11标准下,也能用到类似的循环了:
for (declaration: expression)
statement
注意:这里expression表示的必须是一个序列,如用花括号括起来的初始值列表({1,2,3,4}
)、数组([1,2,3,4]
)或者vector
或string
等类型的对象。
比如:
vector<int> a = { 1,2,3,4 };
for (int &item : a)
cout << item << endl;
当用上auto
后,甚至不需要明确声明临时变量的类型:
vector<int> a = { 1,2,3,4 };
for (auto &item : a)
cout << item << endl;
有一点要注意的是,在for
循环内不能增加迭代变量的元素
Python:
a = [1, 2, 3, 4]
for item in a:
print(item)
a.append(5)
这样会造成死循环!因为for循环永远也遍历不到a的最后一个元素
C++:
vector<int> a = { 1,2,3,4 };
for (auto &item : a)
{
cout << item << endl;
a.push_back(5);
}
在VS2015下能够编译成功,但运行时即会弹出错误: