C++ 向量运算

C++ Vector Operations

有什么替代方案吗?在特定条件下以倍数执行向量运算?

我想执行擦除向量操作 (n-1) 次,只删除给定 if 条件下特定向量中的第一个元素。

这样可以吗

if ( ret.size() == n ){
        (n-1)*order.erase(order.begin());
        (n-1)*quantity.erase(quantity.begin());
        (n-1)*price.erase(price.begin());
 }

我目前正在做这个

if ( ret.size() == 2 ){
        order.erase(order.begin());
        quantity.erase(quantity.begin());
        price.erase(price.begin());
 }
 if ( ret.size() == 3 ){
        order.erase(order.begin());
        order.erase(order.begin());
        quantity.erase(quantity.begin());
        quantity.erase(quantity.begin());
        price.erase(price.begin());
        price.erase(price.begin());
}
order.erase( order.begin(), order.begin() + ( ret.size() - 1 ) );

当然需要先检查 ret.size()order.size(),但您的代码似乎可以从上下文断言。

话虽如此,当您从向量的开头反复擦除时,可能是向量的排序方式错误,或者使用 std::deque、performance-wise 可能会更好。


编辑: 从评论看来,您的实际 问题是“如何删除向量中除最后一个元素以外的所有元素” ”。有很多方法可以做到这一点,比如

// actually erasing all but the last
order.erase( order.begin(), order.end() - 1 );

...或...

// creating a new vector with the last element of the old
order = vector< ... >{ order.back() };

(此处的省略号代表您的 order 向量的类型,而不是实际的省略号——您必须填写该部分。)