分离对象的矢量

时间:2014-03-31 09:05:08

标签: c++ object vector

我正在编写一个函数,它将对象矢量分成两个向量,具体取决于其中一个对象的值。我想要它然后返回任何一个向量。

这是我到目前为止的代码

std::vector<AggregatedQuoteType> OrderBook::get_aggregated_order_book(SellBuyType which_side) const
{
    std::vector<AggregatedQuoteType> ret;

    std::vector<AggregatedQuoteType>::const_iterator i = v_OrderInfo.begin();
        for (; i != v_OrderInfo.end(); ++i)
            ((*i).get_SB_type()==BUY ? v_BuyOrders : v_SellOrders).push_back((*i));

    if(which_side==SELL){
        ret = v_SellOrders;
    }
    else{
        ret = v_BuyOrders;
    }
    return ret;
}

修改

我收到以下错误:

  

[错误]没有匹配函数来调用&#39; std :: vector :: push_back(const AggregatedQuoteType&amp;)const&#39;

2 个答案:

答案 0 :(得分:2)

您已将功能get_aggregated_order_book标记为const

OrderBook::get_aggregated_order_book(SellBuyType which_side) const
                                                             ^^^^^
                                                             Here!

C ++中的const关键字意味着您不会对班级中的任何成员进行更改,我认为这些成员是v_BuyOrdersv_SellOrders

如果要修改OrderBook类的成员,则需要使该方法为非常量。

答案 1 :(得分:1)

您是否需要填充v_BuyOrders和v_SellOrders,或者只返回who_side匹配的内容?如果是后者,那么只应用copy_if操作并返回结果呢?

std::vector<AggregatedQuoteType> ret;
std::copy_if(v_OrderInfo.cbegin(), v_OrderInfo.cend(), std::back_inserter(ret),
    [=](const AggregatedQuoteType &at) { return at.get_SB_type() == which_side) };
return ret; 

编辑:不使用lambda / C ++ 11,

struct pred {
    SellBuyType type;
    pred(SellBuyType t) : type(t) {}
    bool operator()(const AggregatedQuoteType &at) {
       return at.get_SB_type() != type; // Copies the elements for which this returns false
    }
};

std::remove_copy_if(v_OrderInfo.cbegin(), v_OrderInfo.cend(), std::back_inserter(ret), pred(which_side));

请注意,remove_if / remove_copy_if实际上并没有移除任何内容,只需移动&#34;删除&#34;向量背面的元素。如果你想删除元素,也可以在remove_copy_if的返回值上使用vector :: erase。