矢量迭代器不是增量的

时间:2015-06-04 16:52:03

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

我正在尝试在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"));
    }

此处我的程序崩溃并出现以下错误: enter image description here

知道会发生什么,为什么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 个答案:

答案 0 :(得分:4)

<div class="container"> <ul> <li>test sdfsdfs</li> <li>testsdf sdfsd</li> <li>test sdfsdfs</li> <li>testsdf sdfsd</li> <li>test sdfsdfs</li> <li>testsdf sdfsd</li> <li>test sdfsdfs</li> <li>testsdf sdfsd</li> <li>test sdfsdfs</li> <li>testsdf sdfsd</li> </ul> </div>的问题是,向量filterByCategory 为空,您需要使用正确数量的元素创建它,或使用std::back_inserter按需创建元素。

顺便说一句,没有必要先复制到fin向量中。使用例如all直接repo->getAll().begin()来电。{/ p>