我试图实现一个过滤操作,它采用向量V并创建另一个向量D,过滤后的元素为V.结果不能成为指针,我不允许使用常规for循环/ while。我正在考虑使用:for_each,copy,copy_if但似乎没有用。
$my_tracking_number = $this->db->query("
SELECT `tracking_number`
FROM `".DB_PREFIX."order_history`
WHERE `order_id` = 'MUFFINS'
")->row['tracking_number'];
if ( !empty($my_tracking_number) {
$this->data['tracking_number'] = $my_tracking_number;
}
执行push_back时会出现错误。
vector<Car> fin;
vector<Car> all(repo->getAll());
for_each(all.begin(), all.end(), [=]( Car& cc) {
if ( cc.getModel() == model) {
Car c(cc.getNumber(),cc.getModel(),cc.getCategory());
fin.push_back(c);
}
这将进入迭代器库并给出错误以及&#34;类型为const的条件表达式Car是非法的&#34;
有没有办法从一个向量中复制我需要的元素,并将它们添加到另一个像这样的循环中?
我尝试了(find_if(...)同一个想法,使用lambda并试图创建一个新的Car并最终将它添加到我的D矢量但它没有工作
完全核心过滤功能:
copy_if(all.begin(), all.end(),fin.begin(),
[&](const Car& cc) { if (cc.getModel()==model) return cc; });
答案 0 :(得分:4)
这将进入迭代器库并给我错误以及“const类型的条件表达式是非法的”
你的lambda函数应该返回一个布尔值,而不是一个对象。将其更改为
copy_if(all.begin(), all.end(),fin.begin(),
[&](const Car& cc) {
return (cc.getModel()==model); });
如果输入范围中的项目应该复制到结果中,那么它应该被copy_if()
用作条件。
答案 1 :(得分:0)
for_each
并在[&]
类中提供复制构造函数, Car
也会有效。