C++ Stack和Queue

Stack的简单介绍

1. stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。
2. stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。
3. stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类,这些容器类应该支持以下操作:
empty:判空操作
back:获取尾部元素操作
push_back:尾部插入元素操作
pop_back:尾部删除元素操作
4. 标准容器vector、deque、list均符合这些需求,默认情况下,如果没有为stack指定特定的底层容器,默认情况下使用deque

Stack的模拟实现:
Stack.h

namespace Stack

{
    template<class T, class Container = vector<T>>

    class stack

    {

    public:

        //stack();

        void push(const T& x)
        {
            _con.push_back(x);
        }

        void pop()
        {
            _con.pop_back();
        }

        T& top()
        {
            return _con.back();
        }

        const T& top()const
        {
            return _con.back();
        }

        size_t size()const
        {
            return _con.size();
        }

        bool empty()const
        {
            return _con.empty();
        }

    private:

        Container _con;

    };
}

测试代码:

Stack.cpp

#include"Stack.h"


using namespace std;

void test_stack1()
{
	//Stack::stack<int, list<int>> st;
	//Stack::stack<int, vector<int>> st;
	Stack::stack<int> st;
	st.push(1);
	st.push(2);
	st.push(3);
	st.push(4);

	while (!st.empty())
	{
		cout << st.top() << " ";
		st.pop();
	}
	cout << endl;
}

int main()
{
	//test_stack1();
	test_stack1();

	return 0;
}

Queue的简单介绍

1. 队列是一种容器适配器,专门用于在FIFO上下文(先进先出)中操作,其中从容器一端插入元素,另一端提取元素。
2. 队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从队尾入队列,从队头出队列。
3. 底层容器可以是标准容器类模板之一,也可以是其他专门设计的容器类。该底层容器应至少支

### C++ 中 `stack` `queue` 的数据结构定义及用法 #### 定义与特性 在 C++ 标准库 `<stack>` `<queue>` 中,`std::stack` 是一种后进先出(LIFO, Last In First Out)的数据结构,而 `std::queue` 则是一种先进先出(FIFO, First In First Out)的数据结构。这两种容器适配器都基于其他标准容器(如 `std::deque` 或 `std::list`)来实现。 对于 `std::stack` 而言,默认底层容器为 `std::deque`[^1]。它提供了三个主要的操作函数:`push()` 用于向栈顶添加元素;`pop()` 用于移除栈顶元素;以及 `top()` 返回当前栈顶的元素值[^3]。 而对于 `std::queue` 来说,默认同样使用 `std::deque` 作为底层容器[^2]。它的基本操作包括:`push()` 将新元素加入到队列尾部;`front()` 获取队首元素;`back()` 获取队尾元素;以及通过调用 `pop()` 移除队首元素。 #### 使用方法对比 以下是两种数据结构的具体使用示例: ##### Stack 示例代码 ```cpp #include <iostream> #include <stack> using namespace std; int main() { stack<int> stk; stk.push(1); stk.push(2); stk.push(3); while (!stk.empty()) { cout << stk.top() << " "; // 输出顺序应为 3 2 1 stk.pop(); } return 0; } ``` ##### Queue 示例代码 ```cpp #include <iostream> #include <queue> using namespace std; int main() { queue<int> que; que.push(1); que.push(2); que.push(3); while (!que.empty()) { cout << que.front() << " "; // 输出顺序应为 1 2 3 que.pop(); } return 0; } ``` 上述两段程序分别展示了如何利用 `std::stack` 实现 LIFO 行为借助 `std::queue` 达成 FIFO 效果。 #### 主要区别总结 - **访问模式**: `std::stack` 只允许在一端进行插入删除操作,即遵循 LIFO 原则;相反地,`std::queue` 支持两端操作——一端入队另一端出队,体现 FIFO 特征。 - **功能范围**: 鉴于其单侧受限的特点,`std::stack` 更适合解决那些需要逆序处理或者递归模拟场景下的问题;而当面对诸如广度优先搜索(BFS)之类需按层次遍历的任务时,则更适合选用 `std::queue`[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值