我有一个问题,使用带有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);
}
我该如何解决这个问题?
答案 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);