从向量到向量的过滤操作

时间:2015-06-04 13:47:37

标签: c++ vector

我试图实现一个过滤操作,它采用向量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; });

2 个答案:

答案 0 :(得分:4)

  

这将进入迭代器库并给我错误以及“const类型的条件表达式是非法的”

你的lambda函数应该返回一个布尔值,而不是一个对象。将其更改为

copy_if(all.begin(), all.end(),fin.begin(),
                [&](const Car& cc) { 
                    return (cc.getModel()==model); });

如果输入范围中的项目应该复制到结果中,那么它应该被copy_if()用作条件。

答案 1 :(得分:0)

如果您在lambda表达式中使用for_each并在[&]类中提供复制构造函数,

Car也会有效。