STL小结

STL小结

  • 只有vector和string支持v.begin()+3这种迭代器加上整数的写法

vector

  • 常见STL容器中只有vector和string支持v.begin()+3这种迭代器加上整数的写法
  • v.size(),v.empty()时间复杂度为O(1)
  • v.insert(it,x)在迭代器位置处插入元素
  • v.erase(it)删除迭代器处的元素
  • v.erase(v.begin()+2,v.begin()+6)删除左闭右开区间内的元素
vector<int> vec{1,2,34,5};        //列表初始化
vector<int> vec(5);     //声明一个初始大小为5的int向量,值初始化
vector<int> vec(10, 1); //声明一个初始大小为10且值都是1的向量
  • reverse(v.begin(),v.end())

string

  • getline(cin,str)直到换行才结束
  • getline(cin,str,'q')直到遇到’q’才结束
  • str1.insert(str1.begin(),str2.begin(),str2.begin()+4),三个参数,插入位置,截取的区间
  • str.erase(str.begin())删除单个元素
  • str.erase(first,last)删除区间
  • str.erase(pos,length)起始位置,长度
  • str.substr(pos,len)返回pos号位,长度为len的子串
  • str.find(str2))返回第一次出现位置,unsigned long型
  • str.insert(it,'p')插入
  • str.replace(3,2,"good")3号位开始,连续两个字符替换成”good",即“ab"—>“good”
  • str.find(str2)
  • sting s,char ch[20];s=chstring和char[]的直接赋值

set

  • st.insert(3)插入3
  • st.find(value)返回迭代器
  • st.erase(it),st.erase(value),st.erase(first,last)
在元素外面定义比较函数
struct cmp{
    bool operator() (const int& a,const int& b){
        return a<b;
    }
}
set<int, cmp> st;

若元素本身是结构体:
struct node{
    int a,b;
    bool operator < (const node& aa){
        return aa.b<b;
    }
}

multiset

  • 删除为删除所有值为value的元素,并返回删除个数

map

  • key,value,it->first,it->second
  • it=mp.find(key)
  • mp.erase(it),erase(key),erase(first,last)
  • 同set可自定义比较规则,map<int,chat,cmp> mp;

multimap

  • m.insert(pair<string,int>("sad",34))或者直接m["sad"]=34
  • 删除同multiset是删除全部key下的值

priority_queue

  • priority_queue<int,vector<int>,less<int> > que其中vector用来承载底层的堆结构,less<int>大数在前,greater<int>小数在前
  • 或者结构体内重载运算符< , >定义比较规则
  • 或者函数外面重载()自定义比较规则
struct cmp{
    bool operator () (const int& a,const int& b){
        return a<b;
    }
}
priority_queue <int,cmp> que;

pair

  • #include <utility>或<map>
  • 比较规则:先比较第一个元素,再比较第二个元素
  • mp.insert(make_pair("adf",12));或者mp.insert(pair<string,int>("fas",32));

next_permutation和prev_permutation

  • 分别为返回下一个排列和返回上一个排列
int a[3]={1,2,3};
do{
    cout<<a[0]<<a[1]<<a[2]<<endl;
}while(next_permutation(a,a+3));
123
132
213
231
312
321
若改为perv_permutation 则从321开始

binary_search(a,a+10,5)

  • 找到返回1,没找到返回0

lower_bound(first,last,value)和upper_bound

  • 一个返回第一个大于等于的指针,一个是大于的指针,要求有序

nth_element找第k大的元素

    int a[6]={2,3,1,4,6,5};
    nth_element(a,a+2,a+6);//快排分割思想,将a+2位置的元素找到
    for(int i=0;i<6;i++)cout<<a[i];

    2134653左边均比3小,右边均比3
  • O(n)复杂度,三个参数,nth_element(first,nth,last,cmp);,可自定义比较函数(类似sort的写法)
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值