我正在编写一个函数,它将对象矢量分成两个向量,具体取决于其中一个对象的值。我想要它然后返回任何一个向量。
这是我到目前为止的代码
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;
答案 0 :(得分:2)
您已将功能get_aggregated_order_book
标记为const
。
OrderBook::get_aggregated_order_book(SellBuyType which_side) const
^^^^^
Here!
C ++中的const
关键字意味着您不会对班级中的任何成员进行更改,我认为这些成员是v_BuyOrders
和v_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。