这些是采用一元和二进制函数对象(函数)并返回该函数对象的补码的函数。可以在竞争性编程中使用以获得二进制和一元函数的补充。
当编写补码函数的代码比较困难或冗长时,这些功能非常有用。例如,如果要从字符串删除辅音,则可以为isVowel写一元函数,并可以在STL的remove_if函数中使用其补码。
- not1:此函数采用一元函数对象并返回其补码对象。在这里,我们需要在函子中为一元函子定义arguments_type。
句法:
template
unary_negate not1 (const Predicate& pred) { return unary_negate (pred); } 参数:函数接受一个强制性参数pred ,该参数指定要否定的一元函数对象。
返回值:该函数返回取反的一元对象。
例子:
// C++ program to demonstrate // not1 function template #include
using namespace std; struct pred { bool operator()(const int i) const { return (i % 2 == 0); } // defines argument_type for unary functor // it is begin used by not1 // as argument_type typedef int argument_type; }; // Driver code int main() { vector odd{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; // simple pred functor use // it removes even numbers auto end = remove_if(odd.begin(), odd.end(), pred()); odd.resize(distance(odd.begin(), end)); cout << "removal of even elements: "; for (int i = 0; i < odd.size(); i++) { cout << odd[i] << " "; } cout << "\n"; vector even{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; // complement of pred using not1 // which removes odd numbers end = remove_if(even.begin(), even.end(), not1(pred())); even.resize(distance(even.begin(), end)); cout << "removal of odd elements: "; for (int i = 0; i < even.size(); i++) { cout << even[i] << " "; } return 0; } 输出:removal of even elements: 1 3 5 7 9 removal of odd elements: 2 4 6 8 10
- not2:此函数以二进制仿函数为参数,并返回其补码仿函数。
句法:
template
binary_negate not2 (const Predicate& pred) { return binary_negate (pred); } 参数:函数接受一个强制性参数pred ,该参数pred指定要取反的二进制函数对象。
返回值:该函数返回取反的二进制对象。
例子:
// C++ program to demonstrate // not2 function template #include
using namespace std; int main() { vector vec{ 4, 2, 7, 9, 3, 5, 10, 6 }; // simple use of not2 just provide binary // functor and it will return it complement sort(vec.begin(), vec.end(), not2(less ())); for (int i = 0; i < vec.size(); i++) { cout << vec[i] << " "; } return 0; } 输出:10 9 7 6 5 4 3 2
参考:
- http://www.cplusplus.com/reference/functional/not1/
- http://www.cplusplus.com/reference/functional/not2/
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程” 。