100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > C++ Primer 5th笔记(chap 14 重载运算和类型转换)标准库函数对象

C++ Primer 5th笔记(chap 14 重载运算和类型转换)标准库函数对象

时间:2023-04-19 06:06:09

相关推荐

C++ Primer 5th笔记(chap 14 重载运算和类型转换)标准库函数对象

1. 定义

标准库定义的函数对象(Library-Defined Function Objects):标准库在头文件functional中定义了一组表示算术运算符、关系运算符和逻辑运算符的类,每个类分别定义了一个执行命名操作的调用运算符。

这些类都被定义为模板的形式,可以为其指定具体的应用类型(即调用运算符的形参类型)。

eg.

vector<string> svec = {"a31", "b1" };sort(svec.begin(), svec.end(), greater<string>());for_each(svec.begin(), svec.end(), [](const string& s){std::cout << s << endl; });plus<int> intAdd;//可执行int加法的函数对negate<int> intNegate;//可对int值取反的函数对象int sum = intAdd(10, 20);//sum=30std::cout << sum << endl;sum = intAdd(10, intNegate(10));//sum=0std::cout << sum << endl;

输出结果为

b1a31300

2. 标准库函数对象列表:

3. 可以比较指针

eg.

//lambda表达式是比较两个字符串大小string a1 = "b1";string b1 = "a1";vector<string*> nameTable = {&a1 , &b1}; // vector of pointerssort(nameTable.begin(), nameTable.end(),[](string* a, string* b) {return *a < *b; });for_each(nameTable.begin(), nameTable.end(), [](string* s){std::cout << *s << endl; });//标准库比较两个指针的内存地址, vector<string*> nameTable2 = {&a1 , &b1 }; // vector of pointers sort(nameTable2.begin(), nameTable2.end(), less<string*>());for_each(nameTable2.begin(), nameTable2.end(), [](string* s){std::cout << *s << endl; });

输出:

a1b1b1a1

【引用】

[1] 代码functionObject.h

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。