【发布时间】:2013-02-11 09:27:10
【问题描述】:
为什么要使用迭代器?
例如,如果我有这样的代码:
for (int i = 0; i < vec.size(); i++)
cout << vec[i];
写作有什么好处
for (vector<int>::iterator it != vec.begin(); it != n.end(); ++it)
cout << *it;
另外,为什么i < vec.size() 和i++ 在第一个示例中更常见,而it != begin() 和++it 在第二个示例中更常见?增加它的方式有什么不同?为什么不总是使用等号?
我知道迭代器在 C++11 基于范围的 for 循环和一些 STD 算法中很有用,但是为什么我应该在普通代码中这样做,因为它更冗长?
【问题讨论】:
-
如果 vec 是一个列表呢?
-
都不如
std::for_each(begin(vec), end(vec), [](int x) { std::cout << x; });。避免一个错误和其他容易无意中犯的逻辑错误:使用算法和迭代器范围而不是手写循环。 -
@James McNellis 为什么更好?
-
我从没见过有人写这个:
vector<int>::iterator it != vec.begin();我很确定这是一个编译时错误。