乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      STL 筆記1

       quasiceo 2012-11-12

      C++ Template 筆記

      關(guān)于C++ Template這本書,作者是David VandeVoorde與 Nicolai M. Josuttis.書籍的鏈接
      www./Templates/http://www./tmplbook/。這本書以前的看過一篇,感覺很深入前沿,但是很多內(nèi)容不清楚了,最近重新溫習(xí)了一下STL源碼剖析和C++ Template,感覺有必要做些筆記以供自己參考復(fù)習(xí),因為一篇重看還是挺花時間的。   

      STL 筆記1



      空間分配器:
      SGI STL提供了一個標(biāo)準(zhǔn)的配置器接口,接口是simple_alloc,只不過是把它做了一層隱藏。
      SGI STL配置器其名稱是alloc而非allocator,而且不接受任何參數(shù)。因此在使用時不能寫成標(biāo)準(zhǔn)的寫法:
         vector<int, std::allocator<int> iv;
      應(yīng)寫成
         vector<int, std::alloc> iv


      迭代器與traits技巧
         STL的核心在于:將數(shù)據(jù)容器(containers)和算法(algorithms)分開,彼此獨(dú)立設(shè)計,最后再以一貼膠著劑將其合并。容器和算法的泛型化可以通過class template和function templates分別達(dá)到目標(biāo)。設(shè)計兩者之間的膠著劑則是最大的問題。
         迭代器(iterator)是一種smart pointer.
         Partial specialization (偏特化)的意義:
         如果class template擁有一個以上的template參數(shù),可以針對其中部分(一個或者幾個,但非全部)template參數(shù)進(jìn)行特化工作。換句話說,可以在泛化設(shè)計中提供一個特化版本。<<泛型思維>>對Partial specialization的定義:“針對任何template參數(shù)更進(jìn)一步的條件限制所設(shè)計出來的一個特化版本”.
         迭代器類型之一:value type
         迭代器類型之二:difference type
         迭代器類型之三:reference type
         迭代器類型之四:pointer type
         迭代器類型之五:iterator_category




      容器(containers):序列式容器(sequence containers)和關(guān)聯(lián)式容器(associate containers)
        
      序列式容器(sequence containers):


      vector:
      at() 函數(shù) 返回當(dāng)前Vector指定位置loc的元素的引用. at() 函數(shù) 比 [] 運(yùn)算符更加安全, 因為它不會讓你去訪問到Vector內(nèi)越界的元素.


      list:
      merge()        合并兩個list
      remove_if()    按指定條件刪除元素
      sort()         給list排序
      splice()       合并兩個list
      unique()       刪除list中重復(fù)的元素


      deque:
            采用一塊所謂的map(注意,不是STL的map容器)作為主控。這里所謂map是一小塊連續(xù)空間,其中每個元素(此處稱為一個節(jié)點(diǎn),node)都是指針,指向另一段連續(xù)線性空間,稱為緩沖區(qū)。緩沖區(qū)才是deque的內(nèi)存。
      stack:
           允許新增元素,移除元素,取得最頂端元素.但除了最頂端外,沒有任何其他方法可以存取stack的其他元素.stack不提供走訪功能,也不提供迭代器。
      SGI STL便以deque作為缺省情況下的stack底部結(jié)構(gòu)。STL stack往往不被歸為container(容器),而被歸為container adapter. List 也可以作為stack的底層容器。


      queue:
      以SGI STL 的deque為缺省接口。


      heap:
      heap并不歸屬STL容器組件,它是個幕后英雄,扮演priority queue的助手。


      關(guān)聯(lián)式容器(associate containers):
      標(biāo)準(zhǔn)的STL關(guān)聯(lián)式容器分為set集合和map集合,以及這兩大類的衍生體multiset和multimap,這些容器都是以RB-tree為底層機(jī)制完成。此外SGI STL 還提供了一個不在標(biāo)準(zhǔn)規(guī)格之列的關(guān)聯(lián)式容器:hash table 以及以hash table為底層機(jī)制的hash_set,hash_map,hash_multiset,hash_multimap.
      一般而言,關(guān)聯(lián)式容器的內(nèi)部結(jié)構(gòu)是一個balanced binary tree(平衡二叉樹),以便獲得良好的搜尋效率。balanced binary tree有許多類型,包括AVL-tree,RB-tree,AA-tree。
      RB-tree提供兩種插入操作:insert_unique()和insert_equal(),前者表示被插入的節(jié)點(diǎn)的鍵值key必須是唯一的,后者表示可以重復(fù)。
      注意:RB-tree一開始就要求指定所謂的KeyOfValue仿函數(shù),用來從value中提取key值。
      對于關(guān)聯(lián)式容器,使用其本身所提供的find函數(shù)查找比使用STL算法find更有效率,因為stl算法find()只是循序搜尋。企圖通過迭代器來改變set是不允許的,因為set的所有迭代器都是只讀的迭代器。


      map:
      map的所有元素都是pair,同時擁有value和key,第一個元素被視為鍵值,第二個元素被視為實(shí)值。Map不允許兩個元素有相同的key。因為 map元素的key值關(guān)系到map的元素排列規(guī)則,因此是不能修改它其宗的key值,這樣會破壞map組織。但是可以修改value值。


      hash_set:
      以hashtable為底層機(jī)制,其沒有自動排序功能。


      hash_map:
      以hashtable為底層機(jī)制,其沒有自動排序功能。




      STL 算法
      所有的STL算法都作用在由迭代器[first,last)所標(biāo)出的區(qū)間上,所謂質(zhì)變算法,指運(yùn)算過程中會更改區(qū)間內(nèi)(迭代器所指)的元素內(nèi)容.
      許多STL算法不只支持一個版本,這一類算法的某個版本采用缺省運(yùn)算行為,另一個版本提供額外參數(shù),接受外界傳入一個仿函數(shù)(functor).有些算法 直接這樣區(qū)分不同的版本,附從的那個總是以_if作為結(jié)尾。如replace(),使用內(nèi)建的equality操作符進(jìn)行比對操 作,replace_if()則以接受到得仿函數(shù)()進(jìn)行比較行為。


      質(zhì)變算法通常提供兩個版本:一個是in-place版,就地改變其操作對象;另一個是Copy版本,將操作對象的內(nèi)容復(fù)制一份版本,然后在副本上進(jìn)行修改并返回該副本。

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多