理解bind1st和bind2nd函数
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了理解bind1st和bind2nd函数,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2190字,纯文字阅读大概需要4分钟。
内容图文
![理解bind1st和bind2nd函数](/upload/InfoBanner/zyjiaocheng/530/f14de6f7f0b940a4b3ff7391292c45a2.jpg)
值(v)是一个固定的参数。换言之,uf(x)等价于: bf( x, v) 当使用bind2nd时 bf( v, x) 当使用bind1st时 bind1st 和 bind2nd 函数在处理谓词时非常有用。它们使得二元谓词能够转换成一元谓词;这常用于将一个范围内的所有值与一个特定的值比较: std::vecto
值(v)是一个固定的参数。换言之,uf(x)等价于:
- bf( x, v) – 当使用bind2nd时
- bf( v, x) – 当使用bind1st时
bind1st和bind2nd函数在处理谓词时非常有用。它们使得二元谓词能够转换成一元谓词;这常用于将一个范围内的所有值与一个特定的值比较:
std::vector< int> a;
// ……填充a
// 移除所有小于30的元素
a.erase( std::remove_if( a.begin(), a.end(),
std::bind2nd( std::less< int>(), 30)), a.end());
在大多数时候,bind2nd就足够了,像上面的例子。不管怎样,在进行泛型编程时,你会实现一些处理谓词的函数。谓词指定了范围内的排序准则,通常是“<”(std::less< type>)。记住你可以仅用一个给定的“<”运算符来实现“<=”、“<=”和“>”运算符。这时你会发现bind1st和bind2nd都能用上。
#include
#include
#include
template< class iterator, class predicate, class doer>
void for_each_if( iterator itFirst, iterator itLast, predicate pred, doer do_it)
{
while ( itFirst != itLast)
{
if ( pred( *itFirst)) do_it( *itFirst);
++itFirst;
}
}
void print( int i) { std::cout << i << " "; }
int main(int argc, char* argv[])
{
int aNumbers[] = { 10, 5, 89, 9, 30, -2, -8, 7, 33, 25, 30, 76, 0, 2};
int nCount = sizeof( aNumbers) / sizeof( aNumbers[ 0]);
// a < b
std::cout << "/nNumbers less than 30: ";
for_each_if( aNumbers, aNumbers + nCount,
std::bind2nd( std::less< int>(), 30), print);
std::cout << "/nNumbers bigger than 30: ";
// a > b
for_each_if( aNumbers, aNumbers + nCount,
std::bind1st( std::less< int>(), 30), print);
std::cout << "/nNumbers less or equal than 30: ";
// a <= b <=> !(a > b)
for_each_if( aNumbers, aNumbers + nCount,
std::not1( std::bind1st( std::less< int>(), 30)), print);
std::cout << "/nNumbers bigger or equal than 30: ";
// a >= b <=> !(a < b)
for_each_if( aNumbers, aNumbers + nCount,
std::not1( std::bind2nd( std::less< int>(), 30)), print);
return 0;
}
内容总结
以上是互联网集市为您收集整理的理解bind1st和bind2nd函数全部内容,希望文章能够帮你解决理解bind1st和bind2nd函数所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。