[C++11 : Range-based for]:更简单的序列遍历在传统的C++中,遍历一个容器,我们需要这样写: for (int i = 0; i < v.size(); ++i) { dowork(v[i]); } 或者: for (vector<int>::iterator iter = v.begin(); iter != v.end(); ++iter) { dowork(*iter); } 显然,这两种方法中的样板代码都占了很大一部分,影响了我们对代码本质功能的理解。 一个较简的改进是: for_each(v.begin(), v.end(), dowork); 这个代码相对清晰一些:对序列中的每一个元素,dowork。 出于一些原因,for_each的用法有一些限制。
在C++11中,引入了基于序列的for语句,使用它,我们的程序可以更加清晰: for (int x : v) { dowork(x); }
如果要对容器中的东西进行修改: for (int& x : v) { dowork(x); }
或者,如果你懒的话,直接这样: for (auto& x : v) { dowork(x); }
比较一下,使用for (int x: v)的代码,更能清晰表明作者的意图,也不用写那么多的样板代码,多好! |
|