STL(简述)

STL(简述)

 

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;
        }
    }
}
上一篇:回溯和深度优先搜索


下一篇:std :: max()函数