gpt4 book ai didi

c++ - 如何在排序的 vector 上正确应用 erase remove idiom?

转载 作者:行者123 更新时间:2023-11-30 00:50:57 24 4
gpt4 key购买 nike

通常,我们希望应用 erase remove idiom正确地从 vector 中删除一个元素,例如:

v.erase( std::remove( std::begin(v), std::end(v), 5 ), std::end(v) ); 

其中 v 是整数 vector 。

但是如果先对 vector 进行排序呢?以下是否会做同样的事情,如果是,这是不是最佳方式?

std::sort(v.begin(), v.end());

IntegerVector::iterator it = std::lower_bound(v.begin(), v.end(), 5);

if(it != v.end()) {
(void)v.erase(it, v.end());
}

这是否正确应用了 erase-remove 习语?删除过程后 vector 是否仍然排序(我假设是)?我们不需要做这样的事情吗:

(void)v.erase(std::remove(it), v.end());

(std::remove 的语法不正确,但希望您明白了)。

谢谢,

本。

最佳答案

您可以使用:

auto range = std::equal_range(std::begin(v), std::end(v), 5);
v.erase(range.first, range.second);

对于 C++03,您必须替换 auto与(详细)std::pair<IntegerVector::iterator, IntegerVector::iterator>

std::equal_range返回一对迭代器,范围为 [first, second)具有等于​​给定值的值(此处为 5)(假设 v 已排序)。

关于c++ - 如何在排序的 vector 上正确应用 erase remove idiom?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23270514/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com