STL之容器介面卡

2021-07-14 01:12:54 字數 3432 閱讀 7261

在stl中定義了三種容器介面卡:queue,priority_queue,和stack。

容器介面卡是利用基本容器(如之前介紹的deque,vector,list)作為自己的底層容器,適配它以實現自己特定功能的容器。

容器介面卡有乙個共同的特點:都不支援迭代器(iterator)。

特點:fifo(先進先出)原則。

模板定義

template

> class

queue

t是指儲存的資料型別

container是指用於儲存queue的容器型別,預設的容器是deque,還可以使用list作為queue的底層容器,但不能使用vector作為其的底層容器,因為vector不支援pop_front()函式。

queue的建構函式:

explicit

queue(const container &cnt = container())

此建構函式建立空的queue。

queue的標頭檔案是:

#include
queue成員函式

value_type &back();

const value_type &back() const

返回queue中最後乙個元素

bool empty() const

如果呼叫queue為空則返回true,否則返回false

value_type &front();

const value_type &front() const

返回queue中第乙個元素

void pop()

刪除queue中第乙個元素

void push(const t &val)

將值為val的元素加到queue的尾部

size_type size() const

返回queue中當前元素個數

queue

q;q.push(1);

q.push(2);

q.push(3);

q.push(4);

if (!q.empty())

cout

<<"back() = "

<" ; front() = "

<"\n";

q.pop();

cout

<<"after pop, size() = "

<"\n";

q.push(5);

cout

<<"after push(), size() = "

<"\n";

cout

<<"contents of queue: ";

for (int i=0;icout

<" ";

q.push(q.front());

q.pop();

}

特點:按優先順序來排序queue中的元素

類模板

template

, class comp = less> class priority_queue

t指儲存的資料型別

container是儲存priority queue的容器型別,預設是vector,底層容器必須支援隨機訪問迭代器,因此底層容器可以是deque,不能是list。

comp指priority queue中元素的比較函式

priority_queue介面卡有以下建構函式

explicit priority_queue(const comp &cmpfn = comp(),container &cnt = container());

templatepriority_queue(initer start,initer end,const comp &cmpfn = comp(),container &cnt = container())

第乙個建構函式建立空的priority_queue

第二個建構函式建立由start和end指定範圍的priority queue。

priority_queue標頭檔案:

#include
priority_queue成員函式

bool empty()

如果呼叫priority_queue為空,返回true,否則返回false

void pop()

刪除priority_queue中第乙個元素

void push(const t &val)

將元素新增到priority_queue佇列中

size_type size() const

返回priority_queue中當前元素個數

const value_type &top() const

返回priority_queue中優先順序最高的元素,不刪除元素

example

#include 

#include

using

namespace

std;

int _tmain(int argc, _tchar* argv)

return

1;}

特點:後進先出。

類模板:

template

> class

stack

t是儲存的資料型別

container指底層的容器型別,預設是deque,還可以使用vector,list作為其的底層容器。

stack介面卡的建構函式:

explicit

stack(const container &cnt = container())

建立空的stack

標頭檔案是:

#include
stack成員函式

bool empty() const

如果stack為空返回true,否則返回false

void pop()

刪除stack棧頂元素,也是容器中最後新增的元素

void push(const t &val)

將元素壓進堆疊,也就是棧頂元素

size_type size() const

返回當前棧內元素個數

value_type &top();

const value_type &top() const

返回棧頂元素的引用,不會刪除棧頂元素

code example

stack

s;s.push('a');

s.push('b');

s.push('c');

s.push('d');

while (!s.empty())

STL 容器介面卡

那麼c 中的容器介面卡是幹什麼的呢?可以做乙個模擬,我們已有的容器 比如vector list deque 就是裝置,這個裝置支援的操作很多,比如插入,刪除,迭代器訪問等等。而我們希望這個容器表現出來的是棧的樣子 先進後出,入棧出棧等等,此時,我們沒有必要重新動手寫乙個新的資料結構,而是把原來的容器...

STL容器介面卡

stl學習系列之六 容器介面卡 stl提供了三種容器介面卡 stack,queue,priority queue。介面卡並不是第一類容器,因為它們並沒有提供與元素的儲存形式有關的真正資料結構實現,並且介面卡不支援迭代器。介面卡的優點是 能夠使程式設計師選擇一種合適的底層資料結構。這三個介面卡類都提供...

STL容器介面卡

首先,我們要明白介面卡是幹什麼的?其實就是乙個介面轉換裝置,是得我們能用特定的方法去操作一些我們本來無法操作的東西。舉乙個例子,比如你的乙個裝置支援串列埠線,而你的電腦支援的是usb口,這時候,我們沒有必要重新買乙個支援usb的裝置,只需要一根串列埠轉usb口的小玩意,讓你的裝置能夠連線到usb插口...