将STL算法与Qt容器一起使用

时间:2017-06-04 18:49:28

标签: c++ algorithm qt c++11 stl

我有一个问题,使用带有QList的STL算法:执行时崩溃。 Debuger又向lambda迈出了一步,所以在崩溃之前就是。 (因此,如果list为空则在1次迭代时崩溃,如果list有1个元素 - 在2次迭代时等。)。

void FindDialog::findEntries()
{
    QList<StudentEntry> searchResult;

    condition = [this] (const StudentEntry &entry) -> bool {
                // crashes here 
                return entry.name.getSurname() == surnameEdt1->text() &&
                       entry.group.getValue() == groupEdt->text();
                };

    std::copy_if(model->getStudentEntryList().begin(),
                 model->getStudentEntryList().end(),
                 searchResult.begin(),
                 condition);
}

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:5)

复制元素时,

std::copy_if会增加输出迭代器。您传递了它searchResult.begin(),它同样是end()迭代器,因为searchResult是一个空容器。并且递增(通过)end()迭代器传递的迭代器会调用未定义的行为。

由于QList<T>支持push_back(T)成员函数,因此您应该使用std::back_inserter创建一个std::back_insert_iterator,它将回退到searchResult

std::copy_if(model->getStudentEntryList().begin(),
             model->getStudentEntryList().end(),
             std::back_inserter(searchResult),
             condition);