向量迭代器不是增量的

Posted

技术标签:

【中文标题】向量迭代器不是增量的【英文标题】:Vector iterator not incremental 【发布时间】:2015-06-04 16:52:02 【问题描述】:

我正在尝试在 Qt 中实现一个简单的菜单应用程序,并且我必须制作一个过滤器按钮。 Qt 给出一个错误,我不知道如何解释它。它只能来自这两个功能。我也会发布错误的照片。 过滤操作代码:

vector<Car> Controller::filterByCategory(string category) 
    vector<Car> fin;
    vector<Car> all(repo->getAll());

    copy_if(all.begin(), all.end(),fin.begin(),
                [&](Car& cc)  return (cc.getCategory()==category); );
    return fin;

Qt函数调用过滤函数:

void OwnerWindow::filterCategory() 
    QString sCategory = lCategory->text();
    string category = sCategory.toStdString();
    vector<Car> cars = ctrl->getAllCars();
    vector<Car> fin;
    try 
        fin = ctrl->filterByCategory(category);
    
    catch(WarehouseException& ex) 
            QMessageBox::information(this, "Error!", QString::fromStdString(ex.getMsg()));
    
    catch(...) 
        QMessageBox::information(this,"wtf",QString::fromStdString("huuuuuh"));
    

这里我的程序崩溃并出现以下错误:

知道会发生什么,为什么 Qt 不会捕获一些错误或为什么代码不工作?

编辑: 我试图计算要添加的元素数量,以便创建具有固定大小的最终向量。没用。

vector<Car> Controller::filterByCategory(string category) 
//    vector<Car> fin;
    vector<Car> all(repo->getAll());
    int i = 0;
    for_each(all.begin(),all.end(), [=](const Car& cc) mutable 
        if (cc.getCategory() == category) 
            i++;
        
    );
    vector<Car> fin(i);
    copy_if(all.begin(), all.end(),fin.begin(),
                [&](Car& cc)  return (cc.getCategory()==category); );
    return fin;

【问题讨论】:

【参考方案1】:

filterByCategory 的问题在于向量fin,您要么需要使用正确数量的元素创建它,要么使用std::back_inserter 按需创建元素。

顺便说一句,不需要先复制到all 向量中。使用例如repo-&gt;getAll().begin() 直接在std::copy_if 调用中。

【讨论】:

如果他的调用是临时开始的,他将如何获得他的结束迭代器? 基本上,这取决于 repo->getAll() 返回一个向量还是一个向量&。如果它返回一个向量&,那么我同意你的回答。否则,最好在“全部”中移动构造它 我编辑了我的帖子。我尝试计算元素,以便可以创建具有固定数量元素的鳍。没用。同样的错误 @Charlotte45:您的代码不计算元素。嗯,从技术上讲,确实如此。但它只是丢弃了结果,因为您在 lambda 中按值捕获 i。所以在你打电话给for_each 之后,i 仍然是 0。试试count_if 成功了!谢谢! count_if + 固定大小是解决办法,谢谢大家

以上是关于向量迭代器不是增量的的主要内容,如果未能解决你的问题,请参考以下文章

使用迭代器成员函数“empty()”是不是仅适用于某些向量类型?

迭代器在添加到添加到列表向量的结构中时会停止指向某个值吗?

C++中的向量迭代器

为 std::any_of 等提供反向迭代器是不是有意义?

性能 - 使用迭代器或指针迭代向量?

对于 C++ Random Access Iterator(向量迭代器),迭代器之间的差异是如何计算的?