向量迭代器不是增量的
Posted
技术标签:
【中文标题】向量迭代器不是增量的【英文标题】: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;
【问题讨论】:
【参考方案1】:filterByCategory
的问题在于向量fin
是空,您要么需要使用正确数量的元素创建它,要么使用std::back_inserter
按需创建元素。
顺便说一句,不需要先复制到all
向量中。使用例如repo->getAll().begin()
直接在std::copy_if
调用中。
【讨论】:
如果他的调用是临时开始的,他将如何获得他的结束迭代器? 基本上,这取决于 repo->getAll() 返回一个向量还是一个向量&。如果它返回一个向量&,那么我同意你的回答。否则,最好在“全部”中移动构造它 我编辑了我的帖子。我尝试计算元素,以便可以创建具有固定数量元素的鳍。没用。同样的错误 @Charlotte45:您的代码不计算元素。嗯,从技术上讲,确实如此。但它只是丢弃了结果,因为您在 lambda 中按值捕获i
。所以在你打电话给for_each
之后,i
仍然是 0。试试count_if
。
成功了!谢谢! count_if + 固定大小是解决办法,谢谢大家以上是关于向量迭代器不是增量的的主要内容,如果未能解决你的问题,请参考以下文章