立即弹出错误窗口,程序崩溃等。
代码:
void sort_star(vector<string>& product, vector<double>& star_rating)
{
vector<string>::iterator piter;
vector<double>::iterator cycler;
piter = product.begin();
cycler = star_rating.begin();
while (piter != product.end() && cycler != star_rating.end())
{
++piter; ++cycler;
cout << "/n|" << *piter << "|";
cout << *cycler << " Stars";
}
}
是的,所以我很新,对C ++不太了解。一个很好的解释将不胜感激!
答案 0 :(得分:4)
在while循环中,您在使用迭代器之前先对其进行递增
...
while (piter != product.end() && cycler != star_rating.end()) {
++piter; ++cycler; <--- HERE
这意味着两件事:
FIX 像这样在循环结束时增加:
while (piter != product.end() && cycler != star_rating.end()) {
cout << "/n|" << *piter << "|";
cout << *cycler << " Stars";
++piter; ++cycler;
}
答案 1 :(得分:2)
您要在递增后取消引用迭代器。这将
将尝试取消引用std::vector::end
迭代器。
明显
std::vector::end
:
将迭代器返回到
的最后一个元素之后的元素 容器。此元素充当占位符;试图
访问它会导致未定义的行为。
您本可以在for循环中完成此操作,如下所示:
for ( ; piter != product.end() && cycler != star_rating.end(); ++piter, ++cycler)
{ // ^^ ^^^^^^^^^^^^^^^^^^
cout << "/n|" << *piter << "|" << *cycler << " Stars";
}