簡體   English   中英

向量迭代器不是增量的

[英]Vector iterator not incremental

我正在嘗試在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函數調用filter函數:

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;
}

filterByCategory的問題在於向量fin ,您要么需要使用正確數量的元素創建它,要么使用std::back_inserter來按需創建元素。

順便說一句,不需要先復制到all向量中。 直接在std::copy_if調用中使用例如repo->getAll().begin()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM