内建函数对象

简介: 内建函数对象

内建函数对象


概念:STL中内建一些函数对象


分类:

算术仿函数

关系仿函数

逻辑仿函数


需要引入头文件 #include < functional>


1.算术仿函数


有加减乘除,取模,取反(英文:plus,minus,multiplies,divides,modulus,negate)

模板


template(class T) T negated < T> //(加)


其中只有取反为一元运算,其他为二元运算


例如取反调用:


negate<int> n;   //一元参数只有一个,二元参数也只有一个
cout<<n(10)<<endl;  //输出-10


例如加法调用:


plus<int> n;    //二元参数也只有一个
cout<<n(10,20)<<endl; //输出3


2.关系仿函数

模板:


template< class T>bool equal_to< T > //等于

template< class T>bool not equal_to< T > //不等于

template< class T>bool greater< T > //大于 最常见

template< class T>bool greater_equal< T > //大于等于

template< class T>bool less< T > //小于

template< class T>bool less_equal< T > //小于等于


例子,内建函数放入sort中:


#include <iostream>
using namespace std;
#include <vector>
#include <algorithm>
#include <functional>
void test()
{
  vector<int> v;
  v.push_back(10);
  v.push_back(15);
  v.push_back(30);
  v.push_back(40);
  for(vector<int>::iterator it = v.begin();it!=v.end();it++)
  {
  cout<<*it<<" ";
  }
  cout<<endl; 
  //使sort按降序来排
  sort(v.begin(),v.end(),greater<int>());  //放入内建函数大于
  for(vector<int>::iterator it = v.begin();it!=v.end();it++)
  {
  cout<<*it<<" ";
  }
  cout<<endl;
}
int main()
{
  test();
  system("pause");
  return 0;
}


运行结果:



3.逻辑仿函数

模板:


template< class T>bool logical_and < T> //逻辑与

template< class T>bool logical_or < T> //逻辑或

template< class T>bool logical_not < T> //逻辑非


搬运算法:


transform(v.begin(),v.end(),v1.begin(),logical_not< bool>() )

//头文件#Include < algorithm>


例子:


#include <iostream>
using namespace std;
#include <vector>
#include <algorithm>
#include <functional>
void test()
{
  vector<bool> v;  //布尔类型的容器
  v.push_back(true);
  v.push_back(true);
  v.push_back(false);
  v.push_back(false);
  for(vector<bool>::iterator it = v.begin();it!=v.end();it++)
  {
  cout<<*it<<" ";
  }
  cout<<endl;
  vector<bool> v2;
  v2.resize(v.size());   //先开辟空间
  transform(v.begin(),v.end(),v2.begin(),logical_not<bool>());  //利用搬运算法,搬运前首先要开辟容量
  for(vector<bool>::iterator it = v2.begin();it!=v2.end();it++)
  {
  cout<<*it<<" ";
  }
}
int main()
{
  test();
  system("pause");
  return 0;
}


运行结果:



注意:使用搬运算法时,要提前开辟空间,并且加头文件#include < algorithm>


相关文章
|
7月前
|
算法 编译器 数据库
【C++ 泛型编程 高级篇】使用SFINAE和if constexpr灵活处理类型进行条件编译
【C++ 泛型编程 高级篇】使用SFINAE和if constexpr灵活处理类型进行条件编译
682 0
|
C++
84 C++ - 内建函数对象
84 C++ - 内建函数对象
44 0
|
5月前
|
算法 C++ 容器
|
7月前
|
存储 Python
Python函数参数传递
Python函数参数传递
71 1
|
7月前
|
存储 Rust 程序员
rust中的函数:定义、调用与闭包
本文将深入探讨Rust编程语言中函数的定义、调用方式,以及闭包(closures)的概念和应用。我们将从函数的基本语法出发,逐步深入到函数的参数传递、返回值,再进一步介绍闭包及其捕获环境的能力,帮助读者全面理解并熟练运用Rust中的函数与闭包。
|
算法 C++
82 C++ - 函数对象
82 C++ - 函数对象
42 0
|
存储 编译器 C语言
论函数对象
论函数对象
|
C++
【C++函数对象】STL基础语法学习 | 仿函数&谓词&内建仿函数
重载函数调用操作符的类,其对象常称为函数对象。函数对象使用重载的()时,行为类似函数的调用,所以也叫仿函数。它的本质为一个类,而不是一个函数。
140 0
【C++函数对象】STL基础语法学习 | 仿函数&谓词&内建仿函数
|
算法 C++
STL算法——内建函数对象
STL算法——内建函数对象
117 0
STL算法——内建函数对象
【Swift4】(6) 闭包 | 闭包应用 | 闭包作为函数参数 | 捕获特性
【Swift4】(6) 闭包 | 闭包应用 | 闭包作为函数参数 | 捕获特性
120 0