Arm*_*yan 5 c++ stl bind predicate
我想做的事情很容易用C++ 0x lambdas完成.我只是想弄清楚如何与做bind1st和bind2nd只.
我需要找到i向量中的第一个元素v,例如(i-1)/p1 == p2p1和p2是预定义的整数.
find_if(v.begin(), v.end(), ???)
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚如何用minus<int> divides<int> equal_to<int>和形成谓词bind2nd.好像我需要一些功能组合
equal(div(minus(i, 1), p1), p2)
Run Code Online (Sandbox Code Playgroud)
可能吗?
请不要建议诸如编写独立的一元函数或结构的变通方法operator().我真的很感兴趣的函数的函数bind1st 和bind2nd.这不是真正的代码,只是兴趣.谢谢 :)
不幸的是,仅使用当前的库无法实现您想要做的事情functional。您需要创建自己的类或函数来进行组合。
Boost 曾经提供了一个 Compose 库,用于组合这样的函数,但我认为在引入 Bind 和 Lambda 时它被删除了。
为了完整起见,可以bind使用以下内容来完成:
std::bind(std::equal_to<int>(), /* ... == P2 */
std::bind(std::divides<int>(), /* ... / P1 == P2 */
std::bind(std::minus<int>(), _1, 1), /* (x - 1) / P1 == P2 */
p1),
p2);
Run Code Online (Sandbox Code Playgroud)