基於Vector實現介面卡stack 順序棧

2021-08-10 10:43:29 字數 2135 閱讀 2864

棧遵循先進後出,後進先出的原則,它的插入和刪除都是在棧頂進行操作,是一種特殊的線性順序表,因此,實現棧我們通常建立在順序表的基礎上。下來我們利用之前實現過的容器vector中的一部分介面來實現stack

(在這裡分別用了模板引數和模板的模板引數兩種方式來實現來實現)

stack.h:

#define _crt_secure_no_warnings 1

#pragma once

#include "vector.h"

//模板引數

template

class stack1

void push(const t data)

void pop()

bool empty()

size_t size()

t& top()

const t& top()const

private:

container _con;

};//模板的模板引數

template

class container >

class stack2

void push(const t data)

void pop()

bool empty()

size_t size()

t& top()

const t& top()const

private:

container_con;

};

vector.h

#define _crt_secure_no_warnings 1

#pragma once

#include

using

namespace

std;

#include

template

class vector

//有參建構函式

vector(const t* array,size_t size)

:_start(new t[size])

, _finish(_start)

, _endofstorage(_start+size)

}//析構函式

~vector()

}//尾插

void pushback(const t& data)

//尾刪

void popback()

//獲取有效元素個數

size_t size()const

//判斷是否為空

bool empty()const

//返回尾元素

t& back()

const t& back()const

//清空順序表

void clear()

private:

//檢查容量

void _checkcapacity()

delete _start;

_start = temp;

_finish = _start + i;

_endofstorage = _start + capacity;}}

//過載輸出運算子

template

friend ostream& operator

<

return _cout;

}private:

t* _start;

t* _finish;

t* _endofstorage;

};

測試**:

void funtest1()

while (!s1.empty())

cout

<< endl;

}void funtest2()

while (!s1.empty())

cout

<< endl;

}int main()

讀者可自行進行跟蹤除錯,看看結果

介面卡模式 預設介面卡,類介面卡,物件介面卡

模式思想 改變乙個類的對外介面 增加或減少 以滿足不同外部呼叫者的需求 角色成員 目標介面 target 客戶所期待的介面。目標可以是具體的或抽象的類,也可以是介面。需要適配的類 adaptee 需要適配的類或適配者類。介面卡 adapter 通過包裝乙個需要適配的物件,把原介面轉換成目標介面。適配...

介面卡模式(類介面卡 物件介面卡)

做個筆記 引用 public inte ce usb public inte ce psp public class usber implements usb 類介面卡 psp適用usb介面 public class usbadapter extends usber implements psp 物...

STL 介面卡實現

函式介面轉函式物件介面的介面卡 內部呼叫引數為指標型別 template class const mem fun t public unary function ret operator const tp p const private ret tp m f const const函式介面轉函式物件...