主要讲述:
queue
队列的使用,特点先进先出stack
栈的使用,特点先进后出,与queue
相反dueque
双向队列, 涵盖了queue, stack, vector
的用法,功能强大
queue
queue
队列,特点是先进先出,类似于排队,先排的人先用。它长用于模仿队列,在算法中比较常用的是单调队列
算法。
定义结构: queue<数据类型> 变量名
#include <queue>
queue<int> q1;
queue<double> q2;
queue<结构体类型> q3;
常用函数:
empty
检测队列是否为空size
返回队列元素的个数push
在队列末尾插入元素pop
删除队列的第一个元素front
返回队列的第一个元素
示例代码:
#include <iostream>
#include <queue>
using namespace std;
int main() {
queue<int> values;
// 插入元素
for(int i = 0; i < 5; ++i) {
values.push(i);
}
cout << "元素个数:" << values.size() << endl;
return 0;
}
queue
队列中的数据因为先进先出,不能通过下标访问或随机访问,且队列内的元素无法遍历
如果一定要遍历,可以先pop
然后再push
进行
#include<iostream>
#include<queue>
using namespace std;
int main(int argc, char* argv[]) {
queue<int> myqueue;
myqueue.push(1);
myqueue.push(2);
myqueue.push(3);
//myqueue_size 必须是固定值
int myqueue_size = myqueue.size();
for(int i = 0; i < myqueue_size; i++) {
cout << myqueue.front() << endl;
myqueue.push(myqueue.front());
myqueue.pop();
}
}
Stack
stack
堆栈,特点是先进后出,与queue
相反。
定义结构:stack<数据类型> 变量名
#include <stack>
stack<int> s1;
stack<double> s2[5];
常用函数与queue
类似:
常用函数:
empty
检测堆栈是否为空size
返回堆栈元素的个数push
在堆栈末尾插入元素pop
删除堆栈的第一个元素front
返回堆栈的第一个元素
使用例子与queue
类似
#include <iostream>
#include <stack>
using namespace std;
int main() {
stack<int> values;
// 插入元素
for(int i = 0; i < 5; ++i) {
values.push(i);
}
cout << "元素个数:" << values.size() << endl;
return 0;
}
且不能通过下标访问或随机访问,且队列内的元素无法遍历
dueque
deque
双向队列,特点是可以在队列的两端进行元素的操作,并且可以高效的在队列的任意位置进行元素的插入和删除。
它几乎涵盖了queue队列(先进先出)
,stack堆栈(先进后出)
,vector
等全部用法,功能十分强大。
定义结构: deque<数据类型> 变量名
#include <deque>
deque<int>d1; //定义一个储存数据类型为int的双端队列d1
deque<double>d2; //定义一个储存数据类型为double的双端队列d2
deque<string>d3; //定义一个储存数据类型为string的双端队列d3
deque<结构体类型>d4; //定义一个储存数据类型为结构体类型的双端队列d4
deque<int> d5[N]; //定义一个储存数据类型为int的双端队列数组d5
常用函数:
-
empty
检测队列是否为空 -
size
获取队列元素个数 -
font
返回队列头部元素引用 -
push_back/emplace_back
队列的尾部插入元素 -
pop_back
删除队列尾部元素 -
pop_front
删除队列头部元素 -
clear
清空队列所有元素 -
begin/end
返回头部/尾部+1的迭代器 -
rbegin/rend
返回尾部/头部-1的迭代器 -
insert/erase
指定位置插入/删除元素
#include <iostream>
#include <deque>
using namespace std;
int main() {
deque<int> values;
for(int i =0; i < 5; ++i) {
values.push_back(i);
}
cout << "元素个数" << values.size() << endl;
// 遍历元素,可以通过下标,迭代器,foreach等
deque<int>::iterator iter;
for(iter = values.begin(); iter != values.end(); iter++) {
cout << *iter << "";
}
for(int i=0; i<values.size(); ++i){
cout << values[i] << "";
}
}