我有一个对象向量,想按值删除。但是,该值仅出现一次,我不关心排序。
显然,如果这种按值删除非常普遍,和/或数据集相当大,那么向量将不是最好的数据结构。但是,假设我已经确定不是这种情况。
需要明确的是,如果我的代码是 C,我会对以下内容感到满意:
void delete_by_value( int* const piArray, int& n, int iValue ) {
for ( int i = 0; i < n; i++ ) {
if ( piArray[ i ] == iValue ) {
piArray[ i ] = piArray[ --n ];
return;
}
}
}
使用 std::algos 和容器方法的“现代成语”方法似乎是:
v.erase(std::remove(v.begin(), v.end(), iValue), v.end());
但这应该慢得多,因为对于随机存在的元素,它是 n/2 移动和 n 比较。我的版本是 1 步和 n/2 比较。
在“现代成语”中肯定有比擦除-删除-成语更好的方法吗?如果不是,为什么不呢?