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
向量的类型,而不是实际的省略号——您必须填写该部分。)
有什么替代方案吗?在特定条件下以倍数执行向量运算?
我想执行擦除向量操作 (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
向量的类型,而不是实际的省略号——您必须填写该部分。)