1.stack容器
在C++中,std::stack
是一个容器适配器,它提供了后进先出(LIFO, Last-In-First-Out)的数据结构特性。stack
并不是一个独立的容器,而是基于现有的标准容器(如std::vector
、std::deque
或std::list
)实现的。默认情况下,如果未指定基础容器类型,std::deque
会被用作默认的底层容器。
std::stack
主要接口包括:
-
构造函数:
stack();
默认构造函数,使用默认的容器(通常是deque
)来创建栈。explicit stack(const container& c);
使用给定的容器c
来初始化栈。
-
成员函数:
bool empty() const;
检查栈是否为空。size_type size() const;
返回栈中元素的数量。reference top();
返回栈顶元素的引用,但不移除它。void push(const value_type& x);
在栈顶添加一个元素。void pop();
移除栈顶元素。
注意,stack
不直接提供访问除了栈顶之外的任何元素的方法,这是由其后进先出的特性决定的。
下面是一个简单的使用示例:
//
// Created by 86189 on 2024/6/28.
//
#include <iostream>
#include <stack>
using namespace std;
int main(){
stack<int>stk;
stack<int>stk2(stk);
stk.push(10);
stk.push(20);
stk.push(30);
stk.push(10);
stk2 = stk;
cout << stk.size() << endl;
while (!stk.empty()){
cout << stk.top() << " ";
stk.pop();
}
cout << endl;
cout << stk.size() << endl;
cout << stk2.size() << endl;
return 0;
}
在这个例子中,我们创建了一个整数栈,向其中压入了几个元素,然后查看和操作栈顶元素,展示了基本的栈操作。
2.queue容器
在C++中,std::queue
是一个容器适配器,它提供了先进先出(FIFO, First-In-First-Out)的数据结构特性。与std::stack
类似,queue
也不是一个独立的容器,而是基于现有的标准容器实现的,最常用的底层容器是std::deque
,但也可以是其他容器如std::list
。默认情况下,如果没有特别指定,deque
就是默认的底层容器。
std::queue
的主要接口包括:
-
构造函数:
queue();
默认构造函数,使用默认的容器(通常是deque
)来创建队列。explicit queue(const container& c);
使用给定的容器c
来初始化队列。
-
成员函数:
bool empty() const;
检查队列是否为空。size_type size() const;
返回队列中元素的数量。reference front();
返回队列头部元素的引用,但不移除它。reference back();
返回队列尾部元素的引用,但不移除它。void push(const value_type& x);
在队列尾部添加一个元素。void pop();
移除队列头部元素。
下面是一个简单的使用示例:
//
// Created by 86189 on 2024/6/28.
//
#include <iostream>
#include <queue>
using namespace std;
int main(){
// 创建一个整数类型的队列
queue<int>q;
// 向队列中添加三个元素
q.push(10);
q.push(50);
q.push(20);
// 输出队列末尾的元素
cout << q.back() << endl;
// 输出队列头部的元素
cout << q.front() << endl;
// 当队列不为空时,循环输出队列的头部元素并将其移除
while (!q.empty()){
cout << q.front() << endl;
q.pop();
}
// 输出队列当前的大小
cout << q.size() << endl;
return 0;
}
在这个示例中,我们创建了一个整数队列,向其中添加了几个元素,然后查看和操作队列的头部和尾部元素,展示了基本的队列操作。队列保证了最先添加的元素将会最先被移除,体现了先进先出的原则。