欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

目錄

柚子快報(bào)激活碼778899分享:queue的模擬實(shí)現(xiàn)【C++】

柚子快報(bào)激活碼778899分享:queue的模擬實(shí)現(xiàn)【C++】

http://yzkb.51969.com/

文章目錄

全部的實(shí)現(xiàn)代碼放在了文章末尾什么是適配器模式?準(zhǔn)備工作包含頭文件定義命名空間類(lèi)的成員變量

默認(rèn)成員函數(shù)emptysizefrontbackpushpop全部代碼

全部的實(shí)現(xiàn)代碼放在了文章末尾

queue的模擬實(shí)現(xiàn)和stack一樣,采用了C++適配器模式

queue的適配器一般是deque,也可以是list

因?yàn)閝ueue是有特殊限制的線性表【只能在隊(duì)頭刪除,隊(duì)尾插入】,所以只要是線性結(jié)構(gòu)并且可以高效的實(shí)現(xiàn)頭插和尾刪的線性表,就都可以作為queue的適配器

什么是適配器模式?

適配器模式是一種設(shè)計(jì)模式,它允許將不兼容接口的類(lèi)一起工作。

適配器模式通常用于以下情況:

希望使用一個(gè)類(lèi),但其接口與其他代碼不兼容。希望創(chuàng)建一個(gè)可重用的類(lèi),它能夠?qū)⒔涌谵D(zhuǎn)換為其他接口。希望使用第三方庫(kù)或遺留代碼,但其接口與其他代碼不兼容。

適配器模式通常包括以下三個(gè)主要部分:

目標(biāo)接口(Target):這是期望使用的接口,客戶端代碼只能與目標(biāo)接口交互。源接口(Adaptee):這是需要適配的類(lèi),其接口與目標(biāo)接口不兼容。適配器(Adapter):這是一個(gè)類(lèi),它實(shí)現(xiàn)了目標(biāo)接口,并將調(diào)用轉(zhuǎn)換為對(duì)源接口的調(diào)用。適配器將源接口的調(diào)用轉(zhuǎn)換為目標(biāo)接口的調(diào)用,使得客戶端代碼可以與目標(biāo)接口交互。

可以類(lèi)比我們生活中的家庭電源接口和筆記本電腦充電口與電源適配器,它們之間也是一種適配器關(guān)系

筆記本電腦充電口是上面提到的目標(biāo)接口 家庭電源接口是上面提到的源接口 電源適配器是上面提到的適配器

筆記本電腦的充電口是不能和家庭電源接口直接連接進(jìn)行充電的,因?yàn)楣P記本電腦用的是直流電,而家庭電源輸出的是交流電,所以要把交流電轉(zhuǎn)換為直流電才能給筆記本電腦供電,而電源適配器就能做到這一點(diǎn)

對(duì)應(yīng)了上面提到的適配器模式解決的問(wèn)題: 可以將不兼容接口的類(lèi)一起工作

準(zhǔn)備工作

創(chuàng)建兩個(gè)文件,一個(gè)頭文件myqueue.hpp,一個(gè)源文件test.cpp

【因?yàn)槟0宓穆暶骱投x不能分處于不同的文件中,所以把成員函數(shù)的聲明和定義放在了同一個(gè)文件myqueue.hpp中】

myqueue.hpp:存放包含的頭文件,命名空間的定義,成員函數(shù)和命名空間中的函數(shù)的定義 test.cpp:存放main函數(shù),以及測(cè)試代碼

包含頭文件

iostream:用于輸入輸出 list:提供list類(lèi)型的適配對(duì)象 deque: 提供deque類(lèi)型的適配對(duì)象

定義命名空間

在文件myqueue.hpp中定義上一個(gè)命名空間myqueue 把queue類(lèi)和它的成員函數(shù)放進(jìn)命名空間封裝起來(lái),防止與包含的頭文件中的函數(shù)/變量重名的沖突問(wèn)題

類(lèi)的成員變量

只有一個(gè),是適配器對(duì)象,默認(rèn)con是deque類(lèi)型

默認(rèn)成員函數(shù)

和stack類(lèi)的模擬實(shí)現(xiàn)的時(shí)候一樣 queue的四大默認(rèn)成員函數(shù):構(gòu)造函數(shù),拷貝構(gòu)造函數(shù),析構(gòu)函數(shù),賦值運(yùn)算符重載,都不需要手動(dòng)寫(xiě),使用編譯器提供的默認(rèn)的即可

因?yàn)榫幾g器給的默認(rèn)的這四大成員函數(shù),都有一個(gè)特性: 如果類(lèi)的成員變量是其他類(lèi)實(shí)例化的對(duì)象,調(diào)用本類(lèi)的四大默認(rèn)成員函數(shù)的時(shí)候,對(duì)其他類(lèi)實(shí)例化的對(duì)象進(jìn)行操作時(shí)就可以自動(dòng)調(diào)用那個(gè)類(lèi)自己的四大默認(rèn)成員函數(shù)

empty

因?yàn)榘裶ueue的數(shù)據(jù)都存儲(chǔ)在了適配器對(duì)象里面

所以判斷適配器對(duì)象是否為空即可

加const是為了讓const修飾的對(duì)象也能調(diào)用

bool empty()const

{

return _obj.empty();

}

size

因?yàn)榘裶ueue的數(shù)據(jù)都存儲(chǔ)在了適配器對(duì)象里面

所以適配器對(duì)象的size,就是queue的size

加const是為了讓const修飾的對(duì)象也能調(diào)用

size_t size()const

{

return _obj.size();

}

front

因?yàn)榘裶ueue的數(shù)據(jù)都存儲(chǔ)在了適配器對(duì)象里面

所以適配器對(duì)象中的第一個(gè)數(shù)據(jù),就是隊(duì)頭的數(shù)據(jù)

T& front()

{

return _obj.front();

}

const修飾的對(duì)象只能調(diào)用const修飾的成員函數(shù)

const T& front()const

{

return _obj.front();

}

back

因?yàn)榘裶ueue的數(shù)據(jù)都存儲(chǔ)在了適配器對(duì)象里面

所以適配器對(duì)象中的最后一個(gè)數(shù)據(jù),就是隊(duì)尾的數(shù)據(jù)

T& back()

{

return _obj.back();

}

const修飾的對(duì)象只能調(diào)用const修飾的成員函數(shù)

把返回值改成,const T&類(lèi)型,防止修改

const T& back()const

{

return _obj.back();

}

push

因?yàn)? 要把 queue的數(shù)據(jù)都存儲(chǔ)在適配器對(duì)象里面

所以push就是尾插

void push(const T&val)

{

_obj.push_back(val);

}

pop

因?yàn)榘裶ueue的數(shù)據(jù)都存儲(chǔ)在了適配器對(duì)象里面

所以刪除隊(duì)頭,就是適配器對(duì)象的頭刪

void pop()

{

_obj.pop_front();

}

全部代碼

#include

#include

#include

using namespace std;

namespace myqueue

{

//T是queue里面存儲(chǔ)的數(shù)據(jù)的類(lèi)型

//con是適配器的類(lèi)型

template>

class queue

{

private:

//使用適配器類(lèi) 實(shí)例化的 適配器對(duì)象

con _obj;

public:

//因?yàn)榘裶ueue的數(shù)據(jù)都存儲(chǔ)在了適配器對(duì)象里面

//所以判斷適配器對(duì)象是否為空即可

bool empty()const

{

return _obj.empty();

}

//因?yàn)榘裶ueue的數(shù)據(jù)都存儲(chǔ)在了適配器對(duì)象里面

//所以適配器對(duì)象的size,就是queue的size

size_t size()const

{

return _obj.size();

}

//因?yàn)榘裶ueue的數(shù)據(jù)都存儲(chǔ)在了適配器對(duì)象里面

//所以適配器對(duì)象中的第一個(gè)數(shù)據(jù),就是隊(duì)頭的數(shù)據(jù)

T& front()

{

return _obj.front();

}

//const修飾的對(duì)象只能調(diào)用const修飾的成員函數(shù)

//把返回值改成,const T&類(lèi)型,防止修改

const T& front()const

{

return _obj.front();

}

//因?yàn)榘裶ueue的數(shù)據(jù)都存儲(chǔ)在了適配器對(duì)象里面

//所以適配器對(duì)象中的最后一個(gè)數(shù)據(jù),就是隊(duì)尾的數(shù)據(jù)

T& back()

{

return _obj.back();

}

//const修飾的對(duì)象只能調(diào)用const修飾的成員函數(shù)

//把返回值改成,const T&類(lèi)型,防止修改

const T& back()const

{

return _obj.back();

}

//因?yàn)? 要把 queue的數(shù)據(jù)都存儲(chǔ)在適配器對(duì)象里面

//所以push就是尾插

void push(const T&val)

{

_obj.push_back(val);

}

//因?yàn)榘裶ueue的數(shù)據(jù)都存儲(chǔ)在了適配器對(duì)象里面

//所以刪除隊(duì)頭,就是適配器對(duì)象的頭刪

void pop()

{

_obj.pop_front();

}

};

}

柚子快報(bào)激活碼778899分享:queue的模擬實(shí)現(xiàn)【C++】

http://yzkb.51969.com/

好文鏈接

評(píng)論可見(jiàn),查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。

轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19334953.html

發(fā)布評(píng)論

您暫未設(shè)置收款碼

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問(wèn)

文章目錄