C++标准模板库STL提要(在更)

1. vector


向量自动改变长度的数组
如果测试数据需要存入数组,但是长度不知道,但又想动态增加数组,不想浪费空间的话,可以用这个,而且亦可以申请未知量为n长度的数组,具体如下:

int n;
cin>>n;
vector<int>v(n);//申请长度可灵活调整
常见操作

假设申请如下vector<int>v;

  • v.push_back(x);加入新数据(从v[0]开始)
  • v.size();返回数组长度
  • for(int i=0;i<v.size();i++) cout<<v[i]<<endl;通过下标遍历输出
  • vector<int>::iterator it;
    for(it=v.begin();it!=v.end();it++) cout<<*it<<endl;通过迭代器遍历输出

2. set(主要作用是自动去重并排序)


(ps:如果只想去重,而不排序,考虑用unordered_set

(B1064)
集合一个内部自动有序且不含重复元素的容器
set<typename> name;

常见操作
  • insert()

  • find()

  • erease()

  • size()

  • clear()

  • 访问只能通过迭代器(iterator)访问
    如顺序遍历:

    set<int>::iterator it;
    for(it=st.begin();it!=st.end();it++)
    	printf("%d",*it)
    

    如逆序遍历:

    set<int>::iterator it;
    for(it=(st.end());it!=st.begin();)
    {
    	it--;
    	cout<<*it;
    }
    

3. string


用于存放和操作大量的字符串,比char使用起来更加方便。
string str

常见操作
  • str+=拼接
  • 直接用>、<、==等符号进行比较
  • size()length()返回长度
  • insert()插入
  1. str.insert(pos,string)在pos号位置插入字符串string。
  2. str.insert(str.begin()+位数 , str1.begin()+位数 , str1.end())在str开始位置后的某位插入字符串str1中某一段( [ b e g i n + n , e n d ) [begin+n,end) [begin+n,end))的字符串
  • erase()删除
  • clear()清除string中数据
  • substr(pos,len)求子串
  • find()
  • replace()

4. map


用于实现不同类型之间的映射。
(如用int对应string)
map<键类型,值类型> mp;

常见操作
  • find()
  • erase()
  • size()
  • clear()
  • m.count(key):由于map不包含重复的key,因此m.count(key)取值为0,或者1,表示是否包含

5. queue


queue<typename> name ;
队列:遵循先进先出

常见操作
  • name.push()入队
  • name.front()获得队首元素
  • name.back()获得队尾元素
  • name.pop()队首元素出队
  • name.empty()检测队列是否为空,空返回true,false为非空
  • name.size()返回大小

6. priority_queue


priority_queue <typename> name ;
优先队列(其底层用堆实现)
常用来模拟递归

常见操作
  • top()访问队首元素,即堆顶元素
  • name.push()入队
  • name.pop()队首元素出队
  • name.empty()检测队列是否为空,空返回true,false为非空
  • name.size()返回大小

7. stack


stack<typename> name ;

栈:遵循先进后出

常见操作
  • name.push()入栈
  • name.pop()弹出栈顶元素
  • name.top()获得栈顶元素
  • name.empty()检测栈是否为空,空返回true,false为非空
  • name.size()返回大小

8. pair


可以看作一个内部有两个元素的结构体,且元素类型可以指定。
定义方式:

#include<utility>
using namespace std;
//-----1-----
pair <string,int> name;
name.first="123";
name.second=6;
//-----2-----
pair <string,int> name2("456",7);
//-----3-----
name3=make_pair("hhhhh",666);
常见操作
  • 比较大小

常用逻辑符号直接及进行比较,
比较规则是先看first的大小,当first大小相等时再比较second

  • 作为map的键值直接插入
mp.insert(pair<string,int>("123",6);
mp.insert(make_pair("456",7);
  • 用来代替二元结构体机器构造函数,节省编码时间

9. algorithm()


常见操作
  • max()min()abs():分别返回最大值最小值绝对值

  • swap(x,y)互换x和y的值

  • reverse(it1,it2):将数组指针在[it1,it2)之间的元素或容器的迭代器将在该范围内的元素进行反转逆序

  • next_permutation()给出序列全排序的下一个序列

  • fill(a,a+x,num)给数组类型对应范围赋予任意值

  • sort()排序

    不写比较函数,默认递增排序:sort(a,a+x);

    借助cmp比较函数,定制比较规则:

    bool cmp(int a, int b){ 	//从大到小排
    	return a>b;	//当a>b时,把a放在b的前面
    }
    

    结构体数组排序:
    结构体定义

    struct node{
    	int x,y;
    }ssd[10];
    

    若先按照结构体中x从大到小排序,如果相等,再按照y来排序

    bool cmp(node a, node b){ 	
    	if(a.x != b.x)	return a.x > b.x;	
    	else	return a.y > b.y;	//如果相等,再按照y来排
    }
    
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值