stl
作者:
崩溃青蛙
,
2024-07-21 21:00:12
,
所有人可见
,
阅读 3
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
using namespace std;
/*
//vector基本知识
int main()
{
vector<int> a;//定义了一个vector
vector<int> a(10);//定义了一个长度为10的vector
vector<int> a(10,3);//定义了一个长度为10的vector,并把每一个数字初始化为3;
for(auto x : a) cout << x << endl;
return 0;
}
*/
//vector作用
/*
vector<int> a;
a.size();//返回的是vector里元素个数
a.empty();//返回的是a是不是空的空返回truth 非空返回false
clear();//清空
front();//返回第一个数
back();//返回最后一个数
Push_back();//向vector最后一位插入一个数
pop_back();//把最后一个数删掉
begin();和end();//迭代器begin数vector第0个数,end是最后一个数的后一个数
支持比较运算
*/
/*
int main()
{
vector <int> a;
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(auto x : a)cout<<x<<' ';//c++遍历方式
return 0;
}
*/
int main()//vector比较运算
{
vector <int> a(4,3),b(3,4);//按字典序比较
if(a>b) puts("Yes");
else puts("No");
return 0;
}
/*
2.pair<int,int>基本用法
含义:把两个数据类型封装到了一起
first,第一个元素
secoud,第二个元素
支持比较运算,以first为第一关键字,以second为第二关键字(字典序)
int main()
{
pair<int,string> p;
p=make_pair(10,"yxc");//构造一个pair
cout<<p.first<<' '<<p.second<<endl;
pair<int,int> a;
a={5,10};
cout<<a.first<<' '<<a.second<<endl;//用pair分别表示第一个数和第二个数
return 0;
}
3.string 用法
size()/length()返回字符串长度
empty()
clear()
int main()
{
string a="yxc";
a+="def";
a+="c";
cout<<a<<endl;
cout<<a.substr(1,2)<<endl;//1是子串的起始位置2是返回的字串长度 则
//返回的是下标为1开始长度为2的子串
cout<<a.substr(1)<<endl;//返回从1开始的整个子串
//如果想用printf输出则需要使用a.c_str()返回整个a字符串
printf("%s\n",a.c_str());
}
4.队列queue用法
push()入队
pop()弹出队头元素
front()返回队头元素
back()返回对尾元素
size()
empty()
没有clear函数
5.堆(优先队列)priority_queue,默认为大根堆
push()插入元素
pop()弹出堆顶元素
top()返回堆顶元素
无clear函数
如何定义一个小根堆呢?
请看下面
int main()
{
priority_queue<int,vector<int>,greater<int>> heap;
return 0;
}
6.stack 栈
size()
empty()
push()向栈顶插入一个元素
pop()弹出栈顶元素
top()返回栈顶元素
无clear函数
7.deque双端队列
size()
empty()
clear()
front()返回第一个元素
back()返回最后一个元素
push_back()/pop_back()在队尾插入or弹出一个元素
push_front()/pop_front()在队头插入or弹出一个元素
8.set、multiset、map、multimap
size()
empty()
clear()
set/multiset用法
{
set里面是不能插入重复元素
multiset里面可以有重复元素
insert()插入一个数
find()查找一个数
count()返回某个数的个数
erase(){
输入的是一个数x,则删除所有x 时间复杂度:O(k+logn)//k是x的个数
输入的是一个迭代器,删除这个迭代器
}
lower_bound()/upper_bound()
{
lower_bound(x)返回大于等于x的最小的数
upper_bound(x)返回大于x的最小的数
}
}
map(把什么映射给什么/multimap用法
{
insert()插入的数是一个pair
erase()输入的参数是pair或者迭代器
lower_bound()/upper_bound()
int main()
{
map<string,int> a; //把string映射成一个整数
a["yxc"]=1;//把yxc映射到了1
cout<<a["yxc"]<<endl;//时间复杂度O(logn)
set<int> S;
multiset<int> MS;
}
9.bitset 压位
bitset<10000> S;定义了一个长度为10000的bitset
~s //~为取反符
支持与或亦或的操作 &,|,^ //^为亦或符
以及 ==,!=
count()返回有多少个1
any()判断是否至少有一个1
none()判断是否全为0
set()把所有位置成1
set(k,v)将第k位变成v
reset()把所有位变成0
flip()等价于取反~
flip(k)把第k位取反