STL
什么是STL?
C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈。
vector
向量:与数组十分相似,唯一不同的是,向量在需要扩展大小的时候,会自动处理它自己的存储需求,相当于一个自动的动态数组
头文件
基本方法
函数 |
作用 |
vector.push_back(T) |
|
queue
队列:先进先出的一种结构,就类似于生活中排队打饭,排在排头的人先打到饭菜离开
头文件
基本方法
函数 |
作用 |
queue.pop() |
弹出队首的元素 |
queue.push(T) |
队尾加入一个元素 |
queue.front() |
队首元素 |
queue.empty() |
队列是否为空 |
queue.size() |
队列的大小 |
queue.back() |
队尾元素 |
示例
输入格式
一行内输入一串整数,以0结束,以空格间隔。
输出格式
按照输入顺序输出这一串数字,以空格间隔
样例
样例输入
样例输出
代码实现
#include<iostream> #include<queue>
using namespace std;
int main() { int cnt[100]; int i = 0; queue<int> q; while(cin >> cnt[i]){ if(cnt[i] == 0){ break; } q.push(cnt[i]); i++; } while(!q.empty()){ cout << q.front() << " "; q.pop(); } return 0; }
|
输入
输出
deque
双队列:不同于queue,双队列的队首以及队尾均可对元素进行增删改查
头文件
基本方法
基本操作 |
函数 |
作用 |
插入操作 |
deque.push_front(T) |
队首插入元素 |
|
deque.push_back(T) |
队尾插入元素 |
|
deque.insert(pos, val) |
指定位置pos,插入元素val |
|
deque.insert(pos, n, val) |
在指定位置pos插入n个元素val |
|
deque.insert(pos, deque2.begin(), deque2.end()) |
在pos位置插入另一个队列(左闭右开) |
删除操作 |
deque.pop_front() |
弹出队首元素 |
|
deque.pop_back() |
弹出队尾元素 |
|
deque.clear() |
清空队列所有元素 |
|
deque.erase(pos) |
删除pos对应位置数据 |
|
deque.erase(begin, end) |
删除该区间上的元素(左闭右开) |
存取操作 |
deque.back() |
访问队尾元素 |
|
deque.front() |
访问队首元素 |
|
deque.at (index) |
访问指定下标的元素 |
|
deque[i ] |
访问指定下标元素 |
容量操作 |
deque.empty() |
判断是否为空 |
|
deque.size() |
双队列中元素的个数 |
|
deque.resize(num) |
重新指定双队列的大小,不足以默认值填充,超过删除超过部分 |
|
deque.resize(num, val) |
重新指定双队列的大小,不足以val填充,超过删除超过部分 |
排序操作 |
sort(itr.begin(), itr.end()) |
对其中元素进行排序 |
双向队列
输入格式
一行输入一个数字N用于表示数组大小,输入N个数字
输出格式
以双向列表的形式通过三种不同方式输出数组中所有元素
样例
样例输入
样例输出
10 6 260 1000 36 0 10 6 260 1000 36 0 10 6 260 1000 36 0
|
代码实现
#include<iostream> #include<deque>
using namespace std;
int main() { deque<int> d; int num; cin >> num; int *n = new int[num]; for(int i = 0; i < num; i++) { cin >> n[i]; d.push_back(n[i]); } for(int i = 0; i < d.size(); i++) { cout << d[i] << " "; } cout << endl; for(int i = 0; i < d.size(); i++) { cout << d.at(i) << " "; } cout << endl; for(deque<int>::iterator it = d.begin(); it != d.end(); it++) { cout << *it << " "; } return 0; }
|
输入
输出
10 6 260 1000 36 0 10 6 260 1000 36 0 10 6 260 1000 36 0
|
stack
栈:先进后出的一种结构,现实生活中类似于从下至上叠加椅子,将椅子从上至下取下的过程
头文件
基本方法
函数 |
作用 |
stack.pop() |
弹栈 |
stack.push(T) |
压栈 |
stack.top() |
栈顶元素 |
stack.empty() |
栈是否为空 |
stack.size() |
栈的大小 |
数字游戏
输入格式
一行内输入一串整数,以 0 结束,以空格间隔。
输出格式
一行内倒着输出这一串整数,以空格间隔。
样例
样例输入
样例输出
代码实现
#include<iostream> #include<stack>
using namespace std;
int main() { int cnt[100]; int i = 0; stack<int> s; while(cin >> cnt[i]){ if(cnt[i] == 0){ break; } s.push(cnt[i]); i++; } while(!s.empty()){ cout << s.top() << " "; s.pop(); } return 0; }
|
输入
输出