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

Why don't std::find_if and related functions have overloads for the whole container?

本文关键字:重载 函数 find std if 为什么      更新时间:2023-10-16
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?

我也应该添加它。
boost.range拥有它,因此没有技术原因不支持它。
不幸的是,boost。架子落后了一点,因此我使用的版本不支持std::any_of家族。如果标准库已经支持范围,这不是问题。

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

范围的TS虽然增加了这样的过载。我不敢猜测,但是什么时候会列入主要标准,或者什么时候何时可以为它们提供。

无论如何,自己写这些版本很简单,因此,如果您不想使用Boost或等待TS TS,则可以坐下一次,一口气写入所有超载并将其重复使用未来,或者只是每次需要一个算法添加算法,然后让您的收藏有机地增长。