c++ stack(棧)的使用指南

棧的內容不多,使用也相對簡單,只需要遵守一個原則,就是先進後出。最後加入棧的元素將最先被取出來,在棧的同一端進行數據的插入與取出,這一段叫做“棧頂”。使用STL的stack需要include一個頭文件<stack>

容器適配器:

首先我們要明白stack其實是一種容器適配器,它和容器是不一樣的。像vector,deque這種稱爲容器,而容器適配器只是提供了相關接口,內部使用的還是別的容器。比如stack內部默認使用的爲deque,也可以設置爲使用vector等。相當於對這些容器接口進行了封裝,封閉了一些不需要的接口,只留下我們需要的接口。

就像我之前的一個疑問:既然stack能做的,vector都能做,那爲什麼不直接使用vector呢?其實要用vector,deque代替stack完全可以,但是我們使用stack的目的就是爲了告訴你,這是一個棧。對接口的封裝也是爲了防止棧操作以外的誤操作,也就是防止熊孩子不按規矩使用。因此,stack容器沒有迭代器,且不能通過下標訪問元素。

構造:

template <class T, class Container = deque<T> > class stack;

如上,這對尖括號中有兩個參數,第一個是T,表示棧中存放的數據的類型,比如int,double,或者結構體之類。
第二個參數指明底層實現的容器類型,也就是指明這個棧的內部實現方式,比如vector,deque,list。如果不指明它,默認使用deque(雙端隊列)。當然一般情況下不需要指定這一項參數。下面看一下官方文檔的例子:

// constructing stacks
#include <iostream>       // std::cout
#include <stack>          // std::stack
#include <vector>         // std::vector
#include <deque>          // std::deque

int main ()
{
  std::deque<int> mydeque (3,100);          // deque with 3 elements
  std::vector<int> myvector (2,200);        // vector with 2 elements

  std::stack<int> first;                    // empty stack
  std::stack<int> second (mydeque);         // stack initialized to copy of deque

  std::stack<int,std::vector<int> > third;  // empty stack using vector
  std::stack<int,std::vector<int> > fourth (myvector);

  std::cout << "size of first: " << first.size() << '\n';
  std::cout << "size of second: " << second.size() << '\n';
  std::cout << "size of third: " << third.size() << '\n';
  std::cout << "size of fourth: " << fourth.size() << '\n';

  return 0;
}

運行結果:
size of first: 0
size of second: 3
size of third: 0
size of fourth: 2 

其成員函數:

stack::emplace//刪除末尾元素
stack::empty//判斷容器是否爲空
stack::pop//刪除末尾元素
stack::push//向末尾插入元素
stack::size//返回容器元素個數
stack::swap//交換容器
stack::top//返回末尾元素

非成員函數:

1.除了stack自帶的swap函數外,還要STL通用算法,即swap(stack1,stack2),這和其他STL容器類似。

2.重載了關係比較符 ==,!=,>,<,<=,>= 。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章