【问题标题】: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;
}

【问题讨论】:

    标签: c++ qt visual-c++


    【解决方案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 + 固定大小是解决办法,谢谢大家
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 2017-08-29
    • 2018-07-14
    • 2011-11-15
    • 2013-08-24
    相关资源
    最近更新 更多