ppa*_*lka 0 c++ iterator stl map
据我所知,以下方案
#include <map>
int main()
{
std::map<int,int> foo;
std::map<int,int>::iterator start = foo.begin();
while (start++ != foo.end())
;
}
Run Code Online (Sandbox Code Playgroud)
应该终止,但它使用libstdc ++ 4.7.2无限循环.此程序显示的行为是否正确,或者标准库中是否存在错误?在迭代器上运算符++(int)的操作属性是什么?
它map是空的,所以第一个start++尝试增加一个end未定义行为的迭代器.来自std::map::end():
返回容器的最后一个元素后面的元素的迭代器.该元素充当占位符; 尝试访问它会导致未定义的行为.
即使后增量start++返回原始值start,在这种情况下end(),由于存在未定义的行为,期望循环终止也是不合理的.
要更正,请在递增或取消引用之前检查是否start等于foo.end().
| 归档时间: |
|
| 查看次数: |
585 次 |
| 最近记录: |