人们普遍认为,从std::vector
完全删除所需项目的好方法是erase-remove idiom。STL“擦除 - 删除”成语:为什么不“调整大小 - 删除”?
正如上面的链接注意(如本发布之日起),在代码中擦除删除成语是这样的:
int main()
{
// initialises a vector that holds the numbers from 0-9.
std::vector<int> v = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
// erase-remove idiom to completely eliminate the desired items from the vector
v.erase(std::remove(std::begin(v), std::end(v), 5), std::end(v));
}
我想知道resize-remove
成语是否功能和性能等同于erase-remove
习语。或者,也许我错过了一些明显的东西?
以下是resize-remove
成语等同于上述erase-remove
成语吗?
int main()
{
std::vector<int> v = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
// Is this "resize-remove" approach equivalent to the "erase-remove" idiom?
v.resize(std::remove(std::begin(v), std::end(v), 5) - v.begin());
}
“resize-remove”是 - 根据定义 - 不是“成语”,因为该短语不被其他人使用...... –
@TonyD这本身就是一个非常强烈的理由,喜欢删除成语。 –