1.stack和queue的创建
在我们使用C语言来实现stack---栈和queue---队列时,其底层使用了数组和链表来存放数据,而在C++的stack和queue类中,通过模版实现了容器适配器,在创建时,我们可以用尖括号中第二个类型决定stack和queue的底层容器,如果不写,默认为deque
int main()
{
//使用vector作为s1底层容器
stack<int, vector<int>>s1;
//使用list作为q1底层容器
stack<int, list<int>>q1;
return 0;
}
让我们来简单了解一下deque,其底层是一个中控数组,中控数组存放了其他数组的地址,其用图大致表示如下:
与vector和list相比,deque在头插和尾插上面的效率要更优,下标随机访问也不错,但相比vector略逊一筹,中间插入效率很低,要挪动数据,是O(n)
2.stack和queue的相关操作
在我们学习完其它的STL结构后,这两货的操作就很简单了,要注意的是,stack和queue并不支持迭代器操作
using namespace std;
int main()
{
//使用vector作为s1底层容器
stack<int, vector<int>>s1;
//使用list作为q1底层容器
queue<int, list<int>>q1;
//使用 对象.push(插入元素) 来入栈和入队列
for (int i = 0; i < 10; i++)
{
s1.push(i);
q1.push(i);
}
//使用 对象.pop() 弹出元素
//使用 对象.empty() 来判断栈和队列是否为空
cout << "s1:";
while (!s1.empty())
{
//使用 对象.top() 来查看栈顶元素
cout << s1.top() << " ";
s1.pop();
}
cout << endl;
cout << "q1:";
while (!q1.empty())
{
//使用 对象.front() 来查看队头元素
cout << q1.front() << " ";
q1.pop();
}
cout << endl;
return 0;
}