主要讲述:

  • 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] << "";
	}
}
10-15 03:52