@STL常用内容总结
vector(动态数组)
有关vector的相关操作:
1.头文件:#include
2.初始化:
vector<容器类型>v; 如:vector;
指定范围:vectorv(n) 相当于定义一个储存n个(int类型)元素的数组;
vectorv(n,1) 相当于定义一个储存了n个“元素1”的数组;
直接赋值: vectorv{0,1,2,3,4};
有关vector的详细操作参考有关vector代码仓库地址
queue(队列)
特点:先进先出
queue<类型>q;
q.push(N); 在队尾插入元素N;
q.pop(); 删除队列第一个元素;
q.front(); 返回队列第一个元素
q,back(); 返回队列最后一个元素;
q.size(); 返回队列元素个数;
q.empty(); 判断队列是否为空;
大顶堆:(又称优先队列)
priority_queue a; //默认大顶堆,内部从大到小排序
小顶堆:
priority_queue<int,vector,greater > c; //小顶堆,从小到大
(与优先队列操作与queue相同,但没有clear())
deque(双端队列)
特点首位都可以插入删除
deque<类型>de;
push_back(x)/push_front(x) | 把x插入队尾后 / 队首 |
---|---|
back()/front() | 返回队尾 / 队首元素 |
pop_back() / pop_front() | 删除队尾 / 队首元素 |
erase(iterator it) | 删除双端队列中的某一个元素 |
erase(iterator first,iterator last) | 删除双端队列中[first,last)中的元素 |
empty() | 判断deque是否空 |
size() | 返回deque的元素数量 |
clear() | 清空deque |
deque容器可以排序
sort(q.begin(), q.end())//从小到大
//deque里面的类型需要是int型
sort(q.begin(), q.end(), greater());//从大到小排序
sort(q.begin(), q.end(), greater());//从大到小(高版本C++适用)
stack(栈)
特点:后进先出
stack<类型>s;
s.push(n) | n从栈顶入栈 |
---|---|
s.pop() | 移除栈顶元素 |
s.top() | 返回栈顶元素 |
s.empty() | 判断栈是否为空 |
s.size() | 返回栈元素个数 |
注意:栈中元素不能直接遍历
遍历必须逐个取出栈内元素
map()
特点:两个参数为映射关系,即每一个键对应一个键值
根据键值大小,从小到大排列(所以键值类型必须可以比较大小且map不允许两个元素有相同的键值)
元素为pair ,pair的第一个元素为map的键,第二个元素为map的键值。
pair<int,int>P;
P.first为键,P.second为键值
map<键类型,键值类型>m;
初始化:map<int,int> mp;
map[1]=12;
map[2]=14;
map[3]=18;
map[8]=6;
遍历
auto it = mp.begin();//正向遍历。
//auto it=mp.rbegin();//反向遍历
//while(it!=mp.rend())
while(it != mp.end()) {
cout << it->first << " " << it->second << “\n”;
it ++;
}
set
set容器中的元素不会重复,当插入集合中已有的元素时,并不会插入进去,而且set容器里的元素自动从小到大排序。
set<int, greater > s2; // 从大到小排序
set<类型>s;
初始化
for(int i = 1; i <= 10; i++)
s.insert(i);
遍历
for(auto i : s)
cout << i << " ";
对结构体排序
struct as{int x, y;bool operator < (const as &p) const {// 按照点的横坐标从小到大排序,如果横坐标相同,纵坐标从小到大if(x == p.x)return y < p.y;return x < p.x;}
};set<as> s;
for(int i = 1; i <= 5; i++) {int x, y;cin >> x >> y;s.insert({x, y});
}
/* 输入
5 4
5 2
3 7
3 5
4 8
*/
for(auto i : s)cout << i.x << " " << i.y << "\n";
/* 输出
3 5
3 7
4 8
5 2
5 4
*/
string
字符串类型
string s;
cin>>s;(与空格和回车读入结束)
getline(cin,s)//可读入空格,遇回车停止读入。
getline(字符串,个数,终止条件)
基本操作
输入
string s1,s2,s3;
cin>>s1;
s2=s1;//直接拷贝;
s3=“qas”;
s2=“qwq”
string s=s3+s2;
cout<<s;
输出结果:qasqwq
s.size() s.length() //返回字符个数
截取字符串
s1=“012345678”;
string s2 = s1.substr(2,3);
cout<<s2;
输出结果:234(从下标2开始截取3个字符)