为什么std :: find_if和相关函数没有为整个容器重载?

时间:2017-04-21 06:53:32

标签: c++ stl

std::vector<int> vec;
std::find_if(vec.begin(), vec.end(), X);
where X = function or lambda expression

以上是我们今天在C ++中所拥有的。大多数时候,在这样的时候 功能,我们总是通过整个容器。为什么不这些 功能支持 -

std::find_if(vec, X) where X = function or lambda expression

除非我没有正确搜索,否则我在C ++ 17中看不到这一点。 有没有人,如果有这样的事情正在进行中......也许是C ++ 20?

2 个答案:

答案 0 :(得分:0)

我认为它也应该被添加。
boost.range有它,所以没有技术理由不支持它 不幸的是,boost.range略微落后,因此我使用的版本并不支持std::any_of系列。如果标准库已经支持范围,这不会成为问题。

答案 1 :(得分:0)

我不是委员会成员,不知道是否有技术原因(sort(container, comparator)sort(it_begin, it_end)之间的消歧是一个问题,但很容易解决),但是答案通常是没有人提出一份提出这些超载并通过标准化过程进行斗争的实际论文。

范围的TS增加了这样的过载。我不敢猜测,当这将落在主标准中,或者当普通工具链提供它们时。

在任何情况下,自己编写这些版本都非常简单,所以如果你不想使用boost或等待TS的范围,你可以坐下一次,一次性写入所有重载并在未来,或者只是在每次需要时为集合添加一个算法,让你的集合有机地增长。