对std :: set的迭代不会结束

时间:2012-01-12 17:42:08

标签: c++

今天我试图打印一个集合的元素,进入无限循环。 当我试图获取集合的大小时,它返回了正确的值,即8。

代码就像这样

     std::cout << "size of set is " << myset.size();
     for(it=myset.begin();it!=myset.end();it++)
     std::cout << "value is : " << *it;

迭代器在获取大小之前声明了它。其中一个有趣的事实是,在打印时,其中一个预期的元素缺失了。

我知道我会出现狂你或者做一些愚蠢的错误,但我担心的是,它是 可能myset.end()指向一些随机的地方?但即使如此,为什么它在打印时重复来自set的元素而不是崩溃

1 个答案:

答案 0 :(得分:1)

所有STL容器返回的.end()迭代器指向容器的一端,并取消引用它(*iterator)会导致未定义的行为。

你的for循环不会取消引用.end(),但是当你的迭代器等于.end()时它会停止,所以这不应该是你发布的代码中的问题。您之前的其他代码可能有不同的错误。