【发布时间】:2011-04-18 03:23:19
【问题描述】:
所以当我们需要从头到尾遍历一个容器时,我们会写类似
for (i = v->begin(); i != v->end(); i++)
假设i 是容器v 的迭代器。
我的问题是“什么保证 end 总是指向容器中最后一个元素之后的元素?” STL 是如何确保这种行为的,这种情况有没有可能是不正确的?
【问题讨论】:
-
STL 不保证这种行为。 STL 根据标准定义的要求实现此行为。标准说这就是它应该如何工作实现 STL 的开发人员然后应该使 STL 正常工作。
-
这不是最佳做法。当您不存储值时,首选预增量运算符 ++i 而不是 i++。对于许多类型,它更快。
-
@Jive Dadson:这不是我主要关心的问题 --> 在循环的每一轮重新计算
v->end()肯定效率较低...for (auto it = v.begin(), end = v.end(); it != end; ++it)是规范形式,尽管在 C++ 中0x 还不如使用for (auto val : v)或std::foreach和一个lambda 函数。