www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 芯聞號 > 充電吧
[導讀]第1章 容器第1條:慎重選擇容器類型。標準STL序列容器:vector、string、deque和list。標準STL關聯(lián)容器:set、multiset、map和multimap。非標準序列容器sli

第1章 容器


第1條:慎重選擇容器類型。


標準STL序列容器:vector、string、deque和list。


標準STL關聯(lián)容器:set、multiset、map和multimap。


非標準序列容器slist和rope。slist是一個單向鏈表,rope本質上是一“重型”string。


非標準的關聯(lián)容器hash_set、hase_multiset、hash_map和hash_multimap。


vector


vector作為標準關聯(lián)容器的替代。(見第23條)


幾種標準的非STL容器,包括數(shù)組、bitset、valarray、stack、queue和priority_queue。


你是否關心容器中的元素是如何排序的?如果不關心,選擇哈希容器.


容器中數(shù)據的布局是否需要和C兼容?如果需要兼容,就只能選擇vector。(見第16條)


元素的查找速度是否是關鍵的考慮因素?如果是,就要考慮哈希容器、排序的vector和標準關聯(lián)容器-或許這就是優(yōu)先順序。


對插入和刪除操作,你需要事務語義嗎?如果是,只能選擇list。因為在標準容器中,只有l(wèi)ist對多個元素的插入操作提供了事務語義。


deque是唯一的、迭代器可能會變?yōu)闊o效(插入操作僅在容器末尾發(fā)生時,deque的迭代器可能會變?yōu)闊o效)而指向數(shù)據的指針和引用依然有效的標準STL容器。


第2條:不要試圖編寫獨立于容器類型的代碼。


如果你想編寫對大多數(shù)的容器都適用的代碼,你只能使用它們的功能的交集。不同的容器是不同的,它們有非常明顯的優(yōu)缺點。它們并不是被設計用來交換使用的。


  你無法編寫獨立于容器的代碼,但是,它們(指客戶代碼)可能可以。


第3條:確保容器中的對象拷貝正確而高效。


copy in,copy out,是STL的工作方式,它總的設計思想是為了避免不必要的拷貝。使拷貝動作高效并且防止剝離問題發(fā)生的一個簡單辦法是使容器包含指針而不是對象。


第4條:調用empty而不是檢查size()是否為0。


  理由很簡單:empty對所有的標準容器都是常數(shù)時間操作,而對一些list的實現(xiàn),size耗費線性時間。


第5條:區(qū)間成員函數(shù)優(yōu)先于與之對應的單元素成員函數(shù)。


區(qū)間成員函數(shù)寫起來更容易,更能清楚地表達你的意圖,而且它們表現(xiàn)出了更高的效率。


第6條:當心C++編譯器最煩人的分析機制。


把形參加括號是合法的,把整個形參的聲明(包括數(shù)據類型和形參名字)用括號括起來是非法的。


第7條:如果容器中包含了通過new操作創(chuàng)建的指針,切記在容器對象析構前將指針delete掉。


STL很智能,但沒有智能到知道是否該刪除自己所包含的指針所指向的對象的程度。為了避免資源泄漏,你必須在容器被析構前手工刪除其中的每個指針,或使用引用計數(shù)形式的智能指針(比如Boost的sharedprt)代替指針。


第8條:切勿創(chuàng)建包含auto_ptr的容器對象。


拷貝一個auto_ptr意味著改變它的值。例如對一個包含auto_ptr的vector調用sort排序,結果是vector的幾個元素被置為NULL而相應的元素被刪除了。


第9條:慎重選擇刪除元素的方法。


要刪除容器中指定值的所有對象:


如果容器是vector、string或deque,則使用erase-remove習慣用法。


SeqContainer


c.erase(remove(c.begin(),c.end(),1963),c.end());


如果容器是list,則使用list::remove。


如果容器是一個標準關聯(lián)容器,則使用它的erase成員函數(shù)。


要刪除容器中滿足特定條件的所有對象:


如果容器是vector、string或deque,則使用erase-remove_if習慣用法。


如果容器是list,則使用list::remove_if。


如果容器是一個標準關聯(lián)容器,則使用remove_copy_if和swap,或者寫一個循環(huán)遍歷容器的元素,記住當把迭代器傳給erase時,要對它進行后綴遞增。


AssocCOntainer


...


AssocContainer


remove_copy_if(c.begin(), c.end(), inserter(goodValues, goodValues.end()),badValue);


c.swap(goodValues);



for(AssocContainer


if(badValue(*i)) c.erase(i++);


else ++i;


}


要在循環(huán)內部做某些(除了刪除對象之外的)操作:


如果容器是一個標準序列容器,則寫一個循環(huán)來遍歷容器中的元素,記住每次掉用erase時,要用它的返回值更新迭代器。


如果容器是一個標準關聯(lián)容器,則寫一個循環(huán)來遍歷容器中的元素,記住每次把迭代器傳給erase時,要對迭代器做后綴遞增。


第10條:了解分配子(allocator)的約定和限制。


第11條:理解自定義分配子的合理用法。


第12條:切勿對STL容器的線程安全性有不切實際的依賴。


對一個STL實現(xiàn)你最多只能期望:


多個線程讀是安全的。


多個線程對不同的容器寫入操作是安全的。


你不能期望STL庫會把你從手工同步控制中解脫出來,而且你不能依賴于任何線程支持。


第2章vector和string


第13條:vector和string優(yōu)先于動態(tài)分配的數(shù)組。


如果用new,意味著你要確保后面進行了delete。


如果你所使用的string是以引用計數(shù)來實現(xiàn)的,而你又運行在多線程環(huán)境中,并認為string的引用計數(shù)實現(xiàn)會影響效率,那么你至少有三種可行的選擇,而且,沒有一種選擇是舍棄STL。首先,檢查你的庫實現(xiàn),看看是否可以禁用引用計數(shù),通常是通過改變某個預處理變量的值。其次,尋找或開發(fā)一個不使用引用計數(shù)的string實現(xiàn)。第三,考慮使用vector


第14條:使用reserve來避免不必要的重新分配。


通常有兩種方式來使用reserve以避免不必要的重新分配。第一種方式是,若能確切知道或大致預計容器中最終會有多少個元素,則此時可使用reserve。第二種方式是,先預留足夠大的空間,然后,當把所有的數(shù)據都加入后,再去除多余的容量。


第15條:注意string實現(xiàn)的多樣性。


如果你想有效的使用STL,那么你需要知道string實現(xiàn)的多樣性,尤其是當你編寫的代碼必須要在不同的STL平臺上運行而你又面臨著嚴格的性能要求的時候。


第16條:了解如何把vector和string數(shù)據傳給舊的API。


如果你有個vector v,而你需要得到一個只想v中的數(shù)據的指針,從而可把數(shù)據作為數(shù)組來對才,那么只需要使用&v[0]就可以了,也可以用&*v.begin(),但是不好理解。對于string s,隨應的形式是s.c_str()。


如果想用來自C API的數(shù)據來初始化一個vector,那么你可以利用vector和數(shù)組的內存布局兼容性,先把數(shù)據寫入到vector中,然后把數(shù)據拷貝到期望最終寫入的STL容器中。


第17條:使用“swap技巧”出去多余的容量。


vector


表達式vector


同樣的技巧對string也實用:


string s;


...


string(s).swap(s);


第18條:避免使用vector


作為STL容器,vector


第3章 關聯(lián)容器


第19條:理解相等(equality)和等價(equivalence)的區(qū)別。


標準關聯(lián)容器總是保持排列順序的,所以每個容器必須有一個比較函數(shù)(默認為less)。等價的定義正是通過該比較函數(shù)而確定的。相等一定等價,等價不一定相等。




本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據媒體報道,騰訊和網易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據產業(yè)博覽會開幕式在貴陽舉行,華為董事、質量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據產業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經營業(yè)績穩(wěn)中有升 落實提質增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數(shù)字經濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉