最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++ 詳細(xì)講解stack與queue的模擬實(shí)現(xiàn)

 更新時(shí)間:2022年04月15日 11:51:13   作者:m0_52012656  
C++ Stack(堆棧) 是一個(gè)容器類的改編,為程序員提供了堆棧的全部功能,也就是說(shuō)實(shí)現(xiàn)了一個(gè)先進(jìn)后出(FILO)的數(shù)據(jù)結(jié)構(gòu),許多程序都使用了 queue 容器。queue 容器可以用來(lái)表示超市的結(jié)賬隊(duì)列或服務(wù)器上等待執(zhí)行的數(shù)據(jù)庫(kù)事務(wù)隊(duì)列

容器適配器

適配器是一種設(shè)計(jì)模式(設(shè)計(jì)模式是一套反復(fù)使用的、大部分人知道的代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)),該模式試講一個(gè)類的接口轉(zhuǎn)化為用戶希望的另一個(gè)接口,雖然stack與queue中也可以存放元素,但在STL中并沒(méi)有將其劃分為容器,而是成為容器適配器,這是因?yàn)閟tack與隊(duì)列只是堆其他容器進(jìn)行了包裝,STL中的stack和queue是使用雙端隊(duì)列進(jìn)行封裝的。

雙端隊(duì)列

概念

它是一種雙開(kāi)口的連續(xù)空間數(shù)據(jù)結(jié)構(gòu)(與隊(duì)列沒(méi)有關(guān)系),雙開(kāi)口的含義是可以再兩端進(jìn)行插入刪除操作,且時(shí)間復(fù)雜度為O(1),與vector比較,頭插效率比較高,不需要移動(dòng)數(shù)據(jù),與list比較,空間利用率高。

結(jié)構(gòu)

deque并不是真正的連續(xù)空間,而是使用一小段連續(xù)的小空間拼接而成,實(shí)際上deque類似于一個(gè)動(dòng)態(tài)的二維數(shù)組,其底層結(jié)構(gòu)如下圖所示:

中控?cái)?shù)組map: map數(shù)組是一個(gè)指針數(shù)組,指向多個(gè)buff數(shù)組用來(lái)儲(chǔ)存數(shù)據(jù),當(dāng)buff數(shù)組頭或尾滿了,就新開(kāi)辟一個(gè)buff數(shù)組,其指針存在map的相對(duì)應(yīng)位置,當(dāng)map數(shù)組滿了,會(huì)對(duì)map數(shù)組擴(kuò)容(指針數(shù)組的擴(kuò)容并不會(huì)效率低)

deque迭代器

deque所謂的連續(xù)空間是一個(gè)假象,是他底層復(fù)雜的迭代器實(shí)現(xiàn)

STL源碼:

typedef T** map_pointer;
T* cur;
T* first;
T* last;
map_pointer node
  • cur:是當(dāng)前的node指向的buff數(shù)組當(dāng)前指向的地址
  • first:是當(dāng)前node指向的buff數(shù)組,第一個(gè)元素的地址。
  • last:是當(dāng)前node指向的buff數(shù)組,最后一個(gè)元素的地址。
  • node:是指向當(dāng)前map數(shù)組對(duì)應(yīng)的指針,由于他指向的也是一個(gè)指針·,所以為二級(jí)指針。

優(yōu)缺點(diǎn)

優(yōu)點(diǎn):

雙端隊(duì)列,說(shuō)明他很合適頭插頭刪,尾插尾刪,他去做stack和queue的容器適配器很合適。

缺點(diǎn):

雙端隊(duì)列中間插入刪除非常麻煩,效率不高。

deque是一種折中的方案設(shè)計(jì),隨機(jī)訪問(wèn)效率不如vector,任意插入刪除不及l(fā)ist

stack模擬

stack是一種容器適配器,專門(mén)在具有后進(jìn)先出的上下文環(huán)境中,其刪除只能是在一端進(jìn)行操作。

stack是作為容器適配器被實(shí)現(xiàn)的,容器適配器即是對(duì)特定類封裝作為其底層的容器,并提供一組特定的成員函數(shù)來(lái)訪問(wèn)其元素,將特定類作為其底層的,元素特定容器的尾部(即棧頂)被壓入和彈出 。

stack的底層原理可以是任何標(biāo)椎的容器類模板或者一些特定的容器類,這些容器類應(yīng)該支持以下操作:

  • empty:判空操作。
  • back:尾部元素獲取。
  • push_back:尾部插入元素操作
  • pop_back:尾部刪除元素操作。

模擬實(shí)現(xiàn)

template<class T, class Con = deque<T>>
    class stack
    {
    public:
        stack();
        void push(const T& x)
        {
            _c.push_back(x);
        }
        void pop()
        {
            _c.pop_back();
        }
        T& top()
        {
            return _c.back()
        }
        const T& top()const
        {
            return _c.back();
        }
        size_t size()const
        {
            return _c.size();
        }
        bool empty()const
        {
            return _c.empty();
        }
    private:
        Con _c;
    };
?

queue模擬實(shí)現(xiàn)

隊(duì)列是一種容器適配器,專門(mén)用于在FIFO上下文(先進(jìn)先出)中操作,其中從容器一端插入元素,另一端提取元素

隊(duì)列作為容器適配器實(shí)現(xiàn),容器適配器即將特定容器類封裝作為其底層容器類,queue提供一組特定的成員函數(shù)來(lái)訪問(wèn)其元素。元素從隊(duì)尾入隊(duì)列,從隊(duì)頭出隊(duì)列

底層容器可以是標(biāo)準(zhǔn)容器類模板之一,也可以是其他專門(mén)設(shè)計(jì)的容器類。該底層容器應(yīng)至少支持以下操作:

  • empty:檢測(cè)隊(duì)列是否為空
  • size:返回隊(duì)列中有效元素的個(gè)數(shù)
  • front:返回隊(duì)頭元素的引用
  • back:返回隊(duì)尾元素的引用
  • push_back:在隊(duì)列尾部入隊(duì)列
  • pop_front:在隊(duì)列頭部出隊(duì)列

模擬實(shí)現(xiàn)

template<class T, class Con = deque<T>>
    class queue
    {
        public:
            queue();
            void push(const T& x)
            {
                _c.push_back(x);
            }
            void pop()
            {
                _c.pop_front();
            }
            T& back()
            {
                return _c.back();
            }
            const T& back()const
            {
                return _c.back();
            }
            T& front()
            {
                return _c.front();
            }
            const T& front()const
            {
                return _c.front();
            }
            size_t size()const
            {
                return _c.size();
            }
            bool empty()const
            {
                return _c.empty();
            }
        private:
            Con _c;
    };

 

到此這篇關(guān)于C++ 詳細(xì)講解stack與queue的模擬實(shí)現(xiàn) 的文章就介紹到這了,更多相關(guān)C++ stack與queue內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++簡(jiǎn)明分析inline函數(shù)的使用

    C++簡(jiǎn)明分析inline函數(shù)的使用

    inline是C++關(guān)鍵字,在函數(shù)聲明或定義中,函數(shù)返回類型前加上關(guān)鍵字inline,即可以把函數(shù)指定為內(nèi)聯(lián)函數(shù)。這樣可以解決一些頻繁調(diào)用的函數(shù)大量消耗??臻g(棧內(nèi)存)的問(wèn)題
    2022-07-07
  • C語(yǔ)言內(nèi)存函數(shù)的實(shí)現(xiàn)示例

    C語(yǔ)言內(nèi)存函數(shù)的實(shí)現(xiàn)示例

    本文主要介紹了C語(yǔ)言內(nèi)存函數(shù)的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • C++ const修飾變量和修飾函數(shù)介紹

    C++ const修飾變量和修飾函數(shù)介紹

    這篇文章主要介紹了C++ const修飾變量和修飾函數(shù)介紹,本文直接用實(shí)例來(lái)講解各自的作用,并總結(jié)了各自的使用技巧,需要的朋友可以參考下
    2015-03-03
  • C++中引用處理的基本方法

    C++中引用處理的基本方法

    引用不是新定義了一個(gè)變量,而是給已經(jīng)存在的變量取了一個(gè)別名,編譯器不會(huì)為引用變量開(kāi)辟內(nèi)存空間,他和他引用的變量共用一塊內(nèi)存空間,下面這篇文章主要給大家介紹了關(guān)于C++中引用處理的基本方法,需要的朋友可以參考下
    2022-12-12
  • C++實(shí)現(xiàn)考勤管理系統(tǒng)

    C++實(shí)現(xiàn)考勤管理系統(tǒng)

    這篇文章主要介紹了C++實(shí)現(xiàn)考勤管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C++ 中的INT_MAX,INT_MIN數(shù)值大小操作

    C++ 中的INT_MAX,INT_MIN數(shù)值大小操作

    這篇文章主要介紹了C++ 中的INT_MAX,INT_MIN數(shù)值大小操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • C語(yǔ)言簡(jiǎn)單實(shí)現(xiàn)門(mén)禁系統(tǒng)

    C語(yǔ)言簡(jiǎn)單實(shí)現(xiàn)門(mén)禁系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言簡(jiǎn)單實(shí)現(xiàn)門(mén)禁系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • C語(yǔ)言sizeof與字符串處理與動(dòng)態(tài)內(nèi)存分配及main函數(shù)參數(shù)詳解

    C語(yǔ)言sizeof與字符串處理與動(dòng)態(tài)內(nèi)存分配及main函數(shù)參數(shù)詳解

    這篇文章主要介紹了C語(yǔ)言字符串處理函數(shù)、sizeof、動(dòng)態(tài)內(nèi)存分配函數(shù)、main函數(shù)參數(shù)問(wèn)題,static在修飾變量的時(shí)候,如果是修飾全局變量,則跟全局變量功能一樣,通過(guò)示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • OpenCV中findContours函數(shù)參數(shù)詳解

    OpenCV中findContours函數(shù)參數(shù)詳解

    Opencv中通過(guò)使用findContours函數(shù),簡(jiǎn)單幾個(gè)的步驟就可以檢測(cè)出物體的輪廓,很方便。本文將和大家一起探討一下findContours方法中各參數(shù)的含義及用法,感興趣的可以了解一下
    2022-08-08
  • C語(yǔ)言簡(jiǎn)明分析選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)的使用

    C語(yǔ)言簡(jiǎn)明分析選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)的使用

    C語(yǔ)言條件控制語(yǔ)句選擇結(jié)構(gòu),是屬于計(jì)算機(jī)的語(yǔ)言編輯,有在C語(yǔ)言條件控制中的語(yǔ)句選擇結(jié)構(gòu)的存在,即是C語(yǔ)言條件控制語(yǔ)句選擇結(jié)構(gòu),循環(huán)控制語(yǔ)句是一個(gè)基于C語(yǔ)言的編程語(yǔ)句,該語(yǔ)句主要有while循環(huán)語(yǔ)句、do-while循環(huán)語(yǔ)句和for循環(huán)語(yǔ)句來(lái)實(shí)現(xiàn)循環(huán)結(jié)構(gòu)
    2022-04-04

最新評(píng)論

息烽县| 海兴县| 德阳市| 襄城县| 台山市| 营山县| 昌乐县| 本溪市| 乐安县| 和林格尔县| 洱源县| 易门县| 巴南区| 达拉特旗| 梅河口市| 抚松县| 石河子市| 化州市| 洪洞县| 澎湖县| 琼海市| 刚察县| 古田县| 慈利县| 射洪县| 井研县| 利津县| 长岛县| 吴江市| 友谊县| 抚顺市| 杭州市| 金山区| 仲巴县| 中江县| 垣曲县| 静宁县| 洛扎县| 江北区| 浮山县| 广饶县|