今天我试图打印一个集合的元素,进入无限循环。 当我试图获取集合的大小时,它返回了正确的值,即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的元素而不是崩溃
答案 0 :(得分:1)
所有STL容器返回的.end()
迭代器指向容器的一端,并取消引用它(*iterator
)会导致未定义的行为。
你的for循环不会取消引用.end()
,但是当你的迭代器等于.end()时它会停止,所以这不应该是你发布的代码中的问题。您之前的其他代码可能有不同的错误。