在传统的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)的代码,更能清晰表明作者的意图,也不用写那么多的样板代码,多好!
联系客服