亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        選擇合適的STL容器

        2015-10-12 17:38:41賴祥芳
        數(shù)字技術與應用 2015年9期
        關鍵詞:內(nèi)存容器節(jié)點

        摘要:本文探討了C++語言中STL容器的概念、分類和內(nèi)存管理方式,并在最后總結了不同容器對程序性能的影響。不同的STL容器具有各自特點和應用場景,在適當?shù)胤绞褂谜_的STL容器,既可以提高編碼效率又可保證程序質(zhì)量,達到事半功倍的效果;反之,如果毫無規(guī)則的應用STL容器,將會給程序帶來一些莫名其妙的隱患,最明顯的是對性能的影響,造成事倍功半的反效果。

        關鍵詞:STL 容器 vector deque list set map 效率

        中圖分類號:TP393 文獻標識碼:A 文章編號:1007-9416(2015)09-0000-00

        1概念

        STL是Standard Template Library的英文簡稱,中文名稱為標準模板庫,STL最開始由惠普實驗室開發(fā),后來收錄到C++標準規(guī)范中。從根本上說,STL是一些“容器”的集合,這些“容器”有l(wèi)ist、vector、set、map等,STL也是算法和其他一些組件的集合。STL的目的是標準化組件,這樣在編寫應用程序過程中就不用重新開發(fā),可以使用現(xiàn)成的組件。當前所有的C++編譯器都提供對STL支持,STL的版本很多,常見的有HP STL、PJ STL、 SGI STL等。本文討論的目標為標準STL容器。

        2 STL容器的分類

        根據(jù)STL容器自身性質(zhì)和數(shù)據(jù)組織方式可以分為兩類:序列容器、關聯(lián)容器。序列容器有vector、deque、list、string,關聯(lián)容器有set、map。在序列容器中,元素的組織是有序的,而在關聯(lián)容器中,序列的組織是無序的。

        根據(jù)STL容器的存儲方式可以分為兩類:連續(xù)存儲容器、節(jié)點存儲容器。連續(xù)存儲容器有vector、deque、string,節(jié)點存儲容器有set、map、list。在連續(xù)存儲容器中,元素被保存在連續(xù)的內(nèi)存空間;在節(jié)點存儲容器中,元素被分散保存在系統(tǒng)可用內(nèi)存中,節(jié)點存儲容器對分散保存的元素提供管理,通過指針將所有元素組合在一起,形成邏輯上整體。

        3不同容器的內(nèi)存管理方式

        STL的每種容器內(nèi)存管理方式在實現(xiàn)上各不相同,可根據(jù)不同應用場景要求,結合容器內(nèi)存管理方式優(yōu)缺點,選取適合使用的容器。

        3.1 vector

        vector中的元素保存在一片連續(xù)內(nèi)存空間中。vector采取內(nèi)存預申請策略避免新增數(shù)據(jù)引起內(nèi)存頻繁操作,在初始狀態(tài)時,vector會默認申請一片內(nèi)存,當預申請的內(nèi)存不夠用時,vector會參照內(nèi)存分配策略申請比當前所需內(nèi)存更大的空間;由于新增元素導致預申請空間不夠用時,vector執(zhí)行操作步驟如下:

        (1)申請一塊大小為當前使用的內(nèi)存空間兩倍大小的內(nèi)存;(2)將現(xiàn)有的元素拷貝到步驟1申請的內(nèi)存塊中;(3)釋放當前使用的內(nèi)存空間,并將剛申請的內(nèi)存空間設置為當前在用內(nèi)存;(4)保存新增元素。

        如果在vector的非末尾位置新增/刪除元素,vector需要在內(nèi)存中拷貝移動現(xiàn)有元素位置,為新增元素騰出存儲空間/用覆蓋的方式刪除指定元素。此外,vector中的元素被刪除后,vector不會主動釋放已經(jīng)申請內(nèi)存空間。

        3.2 deque

        deque中的元素保存在若干片連續(xù)內(nèi)存空間中,有deque內(nèi)部的管理器對這些空間進行管理。deque也是采取內(nèi)存預申請策略避免新增數(shù)據(jù)引起內(nèi)存頻繁操作,在初始狀態(tài)時,deque會默認申請一片內(nèi)存,當預申請的內(nèi)存不夠用時,deque會參照內(nèi)存分配策略申請一片新增的內(nèi)存空間;由于新增元素導致預申請空間不夠用時,deque執(zhí)行操作步驟如下:

        (1)申請新增一塊內(nèi)存;(2)將步驟1申請的內(nèi)存塊納入內(nèi)部管理器;(3)保存新增元素。

        對deque中的元素執(zhí)行刪除后,deque不會主動釋放已經(jīng)申請的內(nèi)存空間,deque可在隊列的頭和尾新增元素。

        3.3 list

        list中的元素不是保存在連續(xù)的內(nèi)存塊中,在大部分的list實現(xiàn)中,list其實是一個雙向的環(huán)形隊列。當新增加一個元素時,動態(tài)為該元素分配內(nèi)存,并插入到list中相應的位置。刪除一個元素時,list會立即釋放該元素占用的內(nèi)存。

        3.4 set/map

        set/map中的元素不是保存在連續(xù)的內(nèi)存塊中,在大部分的set/map實現(xiàn)中,set/map是一棵平衡二叉樹。當新增加一個元素時,動態(tài)為該元素分配內(nèi)存,并插入到set/map中相應的位置。刪除一個元素時,set/map會立即釋放該元素占用的內(nèi)存。

        4 不同容器對性能的影響

        實際編程過程中對stl容器有各種不同的應用場景,下表根據(jù)STL容器的內(nèi)存管理方式,針對若干典型應用場景進行分析,在具體項目的應用過程中,可以結合項目特點,選擇自己適用的容器見圖1。

        圖1

        5 結語

        本文介紹了STL常見容器的分類和基本特點,并在此基礎上對各種容器在不同應用場景下的性能進行說明。在程序中正確的使用STL容器可以減少代碼量,提升開發(fā)效率,讓系統(tǒng)更穩(wěn)定、高效。

        參考文獻

        [1][美]Noel Llopis著,李鵬賈傳俊譯.C++游戲編程[M].清華大學出版社,2004年9月.

        [2][美]Stanley B.Lippman,[美]Josee Lajoie著,潘愛民,張麗譯.C++ Primer第3版[M].中國電力出版社,2006年9月.

        [3][美] Scott Meyers,潘愛民,陳銘,鄒開紅譯.Effective STL中文版[M].電子工業(yè)出版社,2013年5月.

        [4][臺]侯杰.STL源碼剖析[M].華中科技大學出版社,2002年6月.

        收稿日期:2015-08-11

        作者簡介:賴祥芳(1979—),男,漢族,福建南平人,本科,產(chǎn)品經(jīng)理,主要從事中國電信計費域相關軟件產(chǎn)品研發(fā)。

        猜你喜歡
        內(nèi)存容器節(jié)點
        CM節(jié)點控制在船舶上的應用
        Different Containers不同的容器
        Analysis of the characteristics of electronic equipment usage distance for common users
        基于AutoCAD的門窗節(jié)點圖快速構建
        難以置信的事情
        “春夏秋冬”的內(nèi)存
        當代陜西(2019年13期)2019-08-20 03:54:22
        取米
        抓住人才培養(yǎng)的關鍵節(jié)點
        基于內(nèi)存的地理信息訪問技術
        上網(wǎng)本為什么只有1GB?
        精品国产高清一区二区广区| 中国无码人妻丰满熟妇啪啪软件| 国产精品亚洲一区二区在线观看 | 国产精品一区二区久久国产 | 亚洲男人天堂2019| 国产99精品精品久久免费| 东北老熟女被弄的嗷嗷叫高潮| 国产专区一线二线三线码| 亚洲av成人一区二区三区在线观看| 国产码欧美日韩高清综合一区| 粉嫩人妻91精品视色在线看| 人人摸人人搞人人透| 国偷自产av一区二区三区| 日本少妇爽的大叫高潮了| 丰满的少妇av一区二区三区| 亚洲热线99精品视频| 99视频一区| 富婆叫鸭一区二区三区| 精品亚洲一区二区区别在线观看| 4hu四虎永久在线观看| 久久精品无码专区东京热| 亚洲婷婷丁香激情| 日本熟妇视频在线中出| 午夜dv内射一区二区| 日本边添边摸边做边爱的网站| 亚欧免费视频一区二区三区| 久久久国产熟女综合一区二区三区 | 国产精品美女久久久久av福利| 亚洲欧美国产日韩天堂在线视| 青青草久热手机在线视频观看| 亚洲国产一区二区三区| 医院人妻闷声隔着帘子被中出| 熟妇人妻中文av无码| 青青草针对华人超碰在线| 99人中文字幕亚洲区三| 亚洲第一av导航av尤物| 久久韩国漫画无删减漫画歪歪漫画| 水蜜桃视频在线观看免费18| 国产偷国产偷亚洲高清视频| 亚洲熟少妇在线播放999| 国产日韩久久久久69影院|