std :: set的迭代不会结束
问题描述:
今天我试图打印一个集合的元素,它进入了一个无限循环。 当我试图获取集的大小,它返回我正确的值是8std :: set的迭代不会结束
代码就像它上面获取大小之前宣布这个
std::cout << "size of set is " << myset.size();
for(it=myset.begin();it!=myset.end();it++)
std::cout << "value is : " << *it;
迭代器。其中一个有趣的事实是,打印时,其中一个预期的元素从设置中丢失。
我知道我会对你生气或犯一些愚蠢的错误,但我担心的是,它是 myset.end()指向一些随机的地方吗?但是,即使如此,为什么是它衍生自组的元素,同时印刷,而不是崩溃
答
所有STL容器指向容器的一个过去的最末端返回的.end()
迭代器,并取消引用它(*iterator
)结果未定义的行为。
您的for循环不会解除引用.end()
虽然它会在您的迭代器等于.end()时停止,因此这不应该成为您发布的代码中的问题。您之前可能在其他代码中犯了不同的错误。
问题在于你没有向我们展示的代码。 – 2012-01-12 17:59:11
我的担心是可以结束()函数去haywire ...我从来没有见过它 第二件事是为什么它给大小为8,我有for循环正好在我打印大小的语句下面。它怎么会发生这样的错误? – Invictus 2012-01-12 18:03:22
请发布一个*完整的*,*最小*示例程序,以显示您的错误。一个* complete *程序是我们可以复制粘贴和编译的程序。一个*最小*程序不包含与您的问题无关的行。我知道制作一个似乎很难,但它很有价值。我们将能够更好地解决您的问题。另外,您可以在生产最小样本时自行解决。请参阅http://sscce.org/。 – 2012-01-12 18:11:35