stl

1 vector:不定长数组

1.1 vector是在不知道数组需要多大规模下使用的。与数组相同,vector<int>,vector<string>,vector<自定义类型>都是可以的。同时可以声明二维数组vector<int>a[maxn],vectoe<int*>a;三维数组vector<int>a[maxn][maxn],vector<int**>a。依次类推

1.2 常见的函数用法例如:vector<int>c

c.clear():清楚容器中的所有数据

c.empty():判断容器是否为空,空就返回真值

c.erase(pos):删除pos位置的数据

c.erase(beg,end):删除[beg,end)区间的数据

c.front():传回第一个数据

c.insert(pos,elem):在pos位置处插入元素elem

c.pop_back():删除最后一个元素

c.push_back(elem):在尾部加入一个元素elem

c.resize(num):重新设置容器的大小为num

c.size():返回容器的大小c[i].size()返回二维中每一维的大小

c.begin():返回指向容器第一个元素的迭代器

c.end():返回最后一个元素+1的迭代器指针

1.3遍历元素

可以直接for(int i=0;i<c.size();i++) 用c[i]来进行访问

也可以for(vector<int>iterator::it=c.begin();it!=c.end();it++) 用*it进行访问

1.4扩展

reverse(c.begin(),c.end());将vector中的数据进行翻转

sort(c.begin(),c.end(),cmp):对元素进行排序

2 map 实现二叉搜索树的功能:插入某个数值,查询某个数值,删除某个数值

2.1 map能够实现数据的一 一映射,但是第一关键字只能有一个。比如说学生的学号和姓名存在一一映射的关系,那么可以有map<int,string>student来表示。map内部是由一颗红黑树实现的,自动实现排序功能。(按照第一关键字进行排序)

2.2 map存数据的一种最简单的方式

map<int,int>a;

a[1]=4;

a[2]=3;

可以用上述方式进行存储。如果再出现一个a[1]=9;会覆盖原来的a[1]=4

2.3 map的大小

可以用int size=a.size()的方式获取map的大小

2.4 map的遍历

map<int,int>::iterator it;

for(it=a.begin();it!=a.end();it++)

  cout<<it->first<<" "<<it->second<<endl;

2.5 map中的查找

可以使用find函数,find函数的返回值是一个迭代器,如果没有找到,返回的是end的迭代器

2.6 map的清空和

a.clear()清空map中的所有元素,a.empty()判断map是否为空

2.7 map的删除

 可以先找到关键字的迭代器,删除此迭代器;也可以直接删除元素

it=a.find(1);

a.erase(it);

直接删除元素a.erase(1)

删除整片的元素a.earse(mapStudent.begin(), mapStudent.end());

2.8如果元素是结构体,需要重载运算符才能排序

Typedef struct tagStudentInfo

{

       Int      nID;

       String   strName;

       Bool operator < (tagStudentInfo const& _A) const

       {

              //这个函数指定排序策略,按nID排序,如果nID相等的话,按strName排序

              If(nID < _A.nID)  return true;

              If(nID == _A.nID) return strName.compare(_A.strName) < 0;

              Return false;

       }

}StudentInfo, *PStudentInfo;  //学生信息

3 优先队列 :可以实现堆的功能,插入元素,取出最大或最小的元素

优先队列与普通队列的区别在于,普通队列按照先进先出的顺序,优先队列则是按照某种权值。默认的是权值最大的会先出队列,也就是队首到队尾是从大到小排序的。但是很多情况我们不是按值进行比较的,或者不是从大到小的,这时候就需要重载运算符或者重写cmp函数

3.1 

priority_queue<int>p;

p.push(4);

p.push(1);

p.push(2);

p.push(3);

int m=p.size();

while(m--)

  cout<<p.top();

  p.pop();

struct info{

int val,pos;

}

bool operator<(info a,info b)

  return a.val<=b.val;

3.2 如果想要从小到大排,要重新写下cmp

struct cmp{

  bool operator()(const int &a,const int &b)

    return a>b;//a>b是从小到大排,a<b是从大到小排。

}

priority_queue<int,vector<int>,cmp>p

4 set

set用来存储同一种数据类型的集合,且每个数据只有唯一的一个值。set还可以根据元素的值自动的排序

常用操作:

//插入元素

s.insert(1);

s.insert(3);

//查找元素

set<int>::iterator ite;

ite=s.find(1);//返回的是指针

if(ite==s.end()) puts("not found")

//删除元素

s.erase(2);

s.erase(ite);//删除指针处的元素

s.erase(ite1,ite2);//删除两个指针间的所有元素

//遍历所有元素

lower_bound(key):返回第一个大于等于key的位置

upper_bound(key): 返回第一个大于key的位置

//

s.count(3):用来查找某个元素出现的次数











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值