编程比赛中常见的stl

acm中比较常见的stl用法

vector 向量 变长数组 倍增的思想 
pair
string
queue 队列 priority_queue 优先队列(堆)
stack 栈
deque 双端队列
set , map, multiset ,multimap   基于平衡二叉树(红黑树)
unordered_set, unordered_multiset, unordered_map unordered_multimap 哈希表
bitset 压位

vector

vector 在头文件#include<vector>并位于 std 命名空间中
vector 常被称为向量容器,因为该容器擅长在尾部插入或删除元素,在常量时间内就可以完成,时间复杂度为O(1);而对于在容器头部或者中部插入或删除元素,则花费时间要长一些(移动元素需要耗费时间),时间复杂度为线性阶O(n)。
初始化

vector<int> a;
vector<int> a(10);              //初始a的长度为10,它们的默认初始值都为 0。
vector<int> a(10,3);           //初始a的长度为10,每个元素值为3
vector<int> b{2, 3, 5, 7, 11, 13, 17, 19}; //创建的同时指定初始值以及元素个数

vector<char>value1(5, 'c');
vector<char>value2(value1);       把value1拷贝到value2
vector<int>value1{1,2,3,4,5};
vector<int>value2(begin(value1),begin(value1)+3);//value2保存{1,2,3}

方法

a.size();   //a的元素个数
a.empty();  //a是否为空,若无元素,则返回 true;反之,返回 false。
a.clear();  //清空a
a.front()/a.back()  //返回a的第一个数/返回a的最后一个数
a.push_back()        //向尾部插入
a.pop_back()         //删除队尾元素
a.begin()/a.end()     //返回指向a的第一个元素的迭代器/返回指向a最后一个位置的下一个位置的迭代器
a[]   //支持随机存储
支持比较运算(按字典序排)
vector<int> a(3,4),b(4,3);
    if (a>b) cout<<"Yes";
输出
Yes

遍历vector

for(int i=0;i<10;i++) a.push_back(i);

for(int i=0;i<a.size();i++) cout<<a[i]<<' ';
cout<<endl;
for(vector<int>::iterator i=a.begin();i!=a.end();i++) cout<<*i<<' ';
cout<<endl;
for(auto i:a) cout<<i<<' ';
输出
0 1 2 3 4 5 6 7 8 9 
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9

pair

pair类似结构体pair<string,int>中的两个元素类型可以不同
在头文件#include<utility>中。如果代码中已经用到了using namespace std;那么我们就不用再加入头文件以节省资源

pair<int,int> p;
p.first   //取p的第一个元素
p.second  //取p的第二个元素
支持比较运算,以first为第一关键字,second为第二关键字(字典序)

pair常见用法

pair<int ,string> p;
p=make_pair(3,"asd");
cout<<p.first<<' ';
输出
3
p={6,"sss"};
cout<<p.first<<' '<<p.second<<' ';
输出
6 sss 
还可以在pair中嵌套
pair<int,pair<int,int>> p;
p={1,{2,3}};
cout<<p.first<<' ';
cout<<p.second.first<<' ';
cout<<p.second.second<<' ';
输出
1 2 3

string

string a;
a="asd";
a+="zxc";
cout<<a;  //asdzxc
substr()    //两个参数,第一个是起始地址,第二个是长度。
cout<<a.substr(1,3);
输出
sdz
c_str()  //返回首地址
printf("%s",a.c_str());
输出
asdzxc
string 也有size,empty,clear函数
a.size()/a.length()     //
a.empty()    //
a.clear()    //

queue

queue模拟队列,在头文件#include <queue>

size()
empty()
queue没有clear函数但可以通过q=queue<int>(); 达到清空的效果
push()   //向队尾插入一个元素
pop()    //删除队头元素
front()  //返回队头元素
back()   //返回队尾元素

queue没有迭代器,所以queue的遍历只能

while(!q.empty())
    {
        cout<<q.front()<<' ';
        q.pop();
    }

priority_queue

priority_queue优先队列,默认创建大根堆

push()  //插入一个元素
top()   //返回堆顶元素
pop()   //删除堆顶元素

stack

size()    //
empty()   //
push()    //向栈顶插入
top()     //返回栈顶元素
pop()     //弹出栈顶元素

deque

deque不仅vector一样适合在尾部添加删除,deque 还擅长在序列头部添加或删除元素,所耗费的时间复杂度也为常数阶O(1)

size()       //
empty()      //
clear()      //
front()/back()    //返回队首/返回队尾
push_back()/pop_back()    //队尾插入/队尾删除
push_front()/pop_front()  //队首插入/队首删除
begin()/end()
[]    //随机存储

set

set , map, multiset ,multimap 
size()
empty()
clear()
begin()/end()
	set/multiset
	insert()   插入一个数
	find()     查找一个数
	count()    统计一个数的出现次数
	erase()   
	参数情况1.输入一个x,删除所有的x
	2.输入是迭代器,删除这个迭代器
	lower_bound()  返回大于等于x的最小数的迭代器
	upper_bound()  返回大于x的最小数的迭代器
	map/multimap
	insert()   //输入的数是pair
	erase()    //pair或迭代器
	find()
	[]       //时间复杂度是O(logn)
	lower_bound()
	upper_bound() 

unordered_set

与上面类似
但不支持lower_bound(upper_bound() 
好处是增删改查的时间复杂度O(1)

bitset

定义:
        bitset <个数> 变量名;
    支持:
        ~&|^
        >><<
        ==!=
        []
    常用函数:
        count(); 返回某一个数的个数
        any(); 判断是否至少有一个1
        none(); 判断是否全为0
        set(); 把所有位置赋值为1
        set(k,v); 将第k位变成v
        reset(); 把所有位变成0
        flip(); 把所有位取反,等价于~
        flip(k); 把第k位取反

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开始King

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值