立即弹出错误窗口,程序崩溃等。

码:

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++不太了解。一个很好的解释将不胜感激!

最佳答案

在while循环中,您在使用迭代器之前先增加它们

...
while (piter != product.end() && cycler != star_rating.end()) {
    ++piter; ++cycler; <--- HERE

这意味着两件事:
  • 您跳过第一个元素
  • 您的迭代器到达end(),它是指向PAST-END-POSITION的指针,而不是有效的元素see here

  • FIX 在循环结束时递增,如下所示:
    while (piter != product.end() && cycler != star_rating.end()) {
        cout << "/n|" << *piter << "|";
        cout << *cycler << " Stars";
    
        ++piter; ++cycler;
    }
    

    关于c++ - 循环迭代器时引发“Debug assertion failed”错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53774436/

    10-10 18:24