STL函数对象
STL头文件(13个)
-
< algorithm >
-
< deque >
-
< functional>
-
< iterator>
-
< vector>
-
< list>
-
< map>
-
< memory>
-
< numeric>
-
< queue>
-
< set>
-
< stack>
-
< utility>
函数对象
函数对象概念
概念:
-
重载函数调用操作符的类,其对象常称为函数对象
-
函数对象使用重载的()时,行为类似函数调用,也叫仿函数
本质:
函数对象(仿函数)是一个类,不是一个函数
函数对象使用
特点:
-
函数对象在使用时,可以像普通函数那样调用,可以有参数,可以有返回值
-
函数对象超出普通函数的概念,函数对象可以有自己的状态
-
函数对象可以作为参数传递
#include<iostream>
#include<string>
using namespace std;
class addnum
{
public:
int operator() (int a,int b)
{
return a + b;
}
};
class myprint
{
public:
void operator()(string name)
{
cout <<name<< endl;
this->count++;
}
int count=0; //注意给0 因为全局区为给初始化的默认是1 局部变量是随机
};
void func(myprint &abc,string bcd)
{
abc(bcd);
}
void func2()
{
myprint abc;
func(abc, "佳哥是最帅的");
}
int main()
{
//addnum addnum;
//int a;
//int b;
// cout << "输入第一个数字" << endl;
//cin >> a;
//cout << "输入第一个数字" << endl;
//cin >> b;
//addnum(a, b); //本质上类对象
//myprint a;
//a("葫芦娃");
//a("葫芦娃");
//a("一棵藤上七个瓜");
//a("风吹雨打都不配,啦啦啦");
//cout << "调用次数为" <<a.count<< endl;
func2();
system("pause");
return 0;
}
容器vector
容器 | vector |
---|---|
算法 | for_each |
迭代器 | vector<int>::iterator |
头文件 | #include<vector> |
操作
操作 | 程序 | 补充 |
---|---|---|
创建vector容器 | vector<类型>名字; | |
向容器中插入数据 | 名字.push_back(参数); | |
通过迭代器访问容器中的数据 | vector<类型>::iterator itBegin=名.begin(); | 起始迭代器,指向容器中第一个元素 |
vector<类型>::iterator itEnd=名.end(); | 结束迭代器指向容器中最后一个元素的下一个位置 | |
调出数据 | *itBegin | *itEnd |
遍历方式
#include<iostream>
#include<vector> //容器头文件
#include<algorithm>//标准算法头文件
using namespace std;
int main()
{
//第一种遍历方式
while(itBegin!=itEnd)
{
cout<<*itBegin<<endl;
itBegin++;
}
//第二种遍历方式
for(vector<int>::iterator it=名.begin();it!=名.end();it++)
{
cout<<*it<<endl;
//第三种遍历方式
void print(int a)
{
cout<<a<<endl;
}
for_each(名.begin(),名.end(),print());
}
return 0;
}
vector中存放自定义数据类型
vector<类名>名字;
类名 对象名(构造函数初始化用的变量);
名字.push_back(对象名);
for(vector<类名>::iterator it=名字.begin();it!=名.end();it++)
{
cout<<(*it).类内成员<<endl; //it为类指针
cout<<it->类内成员<<endl;
}
vector中存放自定义类型的指针
vector<类名*>名字;
类名 对象名(构造函数需要参数);
名字.push_back(&对象名);
for(vector<类名*>::iterator it=名字.begin();it!=名.end();it++)
{
cout<<(*(*it)).类内成员<<endl; //it为类指针
cout<<(*it)->类内成员<<endl;
}
vector容器嵌套容器
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
vector<vector<int>v>;
vector<int>v1; //创建小容器
v1.push_back(1); //向小容器中添加数据
v.push_back(v1); //将小容器插入到大容器中
for(vector<vector<int>>::iterator it=v.begin();it!=v.end();it++)
{
for(vector<int>::iterator vit=(*it).end();vit++)
{
cout<<*vit<<endl;
}
}
}