1.序言
STL (Standard Template Library)是C++标准库提供的一套模板类和算法的集合,其中包含了许多常用的数据结构和算法,方便程序员使用和扩展。STL中的stack和queue是两种常用的容器适配器,可以通过使用不同的容器作为底层实现来提供不同的行为。
-
STL stack(栈):
- 栈是一种后进先出(LIFO)的数据结构,只能从容器的一端进行插入和删除操作。
- STL stack适配器提供了对栈的封装,使用时只需要关注栈的操作,而不需要关心底层容器的实现细节。
- 栈的常见操作有入栈(push)、出栈(pop)、查看栈顶元素(top)等。
-
STL queue(队列):
- 队列是一种先进先出(FIFO)的数据结构,只能从容器的一端进行插入操作,从另一端进行删除操作。
- STL queue适配器提供了对队列的封装,使用时只需要关注队列的操作,而不需要关心底层容器的实现细节。
- 队列的常见操作有入队(push)、出队(pop)、查看队首元素(front)、查看队尾元素(back)等。
STL提供的stack和queue适配器默认使用deque(双端队列)作为底层容器,也可以使用vector或list作为底层容器,根据实际需求选择不同的底层容器以满足性能和功能要求。
这里我们用vector和queue作为底层容器。
2. STL stack
太简单,没什么可说的,直接上代码:(用vector作为底层容器)
#pragma once
#include<iostream>
#include<vector>
using namespace std;
namespace zy
{
template<class T,class Container = vector<T>>
class stack
{
public:
void push(const T& t)
{
_con.push_back(t);
}
void pop()
{
_con.pop_back();
}
const T& top() const
{
return _con.back();
}
T& top()
{
return _con.back();
}
size_t size() const
{
return _con.size();
}
bool empty() const
{
return _con.empty();
}
private:
Container _con;
};
}
3. STL queue
同样,直接上代码:(用list作为底层容器)
#pragma once
#include<iostream>
#include<list>
using namespace std;
namespace zy
{
template<class T, class Container = list<T>>
class queue
{
public:
void push(const T& t)
{
_con.push_back(t);
}
void pop()
{
_con.pop_front();
}
const T& front()
{
return _con.front();
}
const T& back()
{
return _con.back();
}
size_t size() const
{
return _con.size();
}
bool empty() const
{
return _con.empty();
}
private:
Container _con;
};
}