gpt4 book ai didi

c++ - 为什么标准库有find和find_if?

转载 作者:可可西里 更新时间:2023-11-01 15:05:08 25 4
gpt4 key购买 nike

难道 find_if 不能只是 find 的重载吗? std::binary_search 和 friend 就是这样做的...

最佳答案

谓词是一个有效的查找对象,因此您可能会产生歧义。


考虑将 find_if 重命名为 find,那么你有:

template <typename InputIterator, typename T>
InputIterator find(InputIterator first, InputIterator last, const T& value);

template <typename InputIterator, typename Predicate>
InputIterator find(InputIterator first, InputIterator last, Predicate pred);

然后,应该做什么:

find(c.begin(), c.end(), x); // am I finding x, or using x to find?

与其尝试提​​出一些复杂的解决方案来根据 x 进行区分(这并不总是能做到*),而是将它们分开会更容易。

*无论您的方案是什么或它可能有多强大,这都是模棱两可的†:

struct foo
{
template <typename T>
bool operator()(const T&);
};

bool operator==(const foo&, const foo&);

std::vector<foo> v = /* ... */;
foo f = /* ... */;

// f can be used both as a value and as a predicate
find(v.begin(), v.end(), f);

†保存读心术。

关于c++ - 为什么标准库有find和find_if?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3533251/

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