天天看點

侯捷STL學習(六)--深入list && Iterator traits

第十三,四節 深度探索list(上,下)

  • list Gnu2.9

    源代碼實作
  • 注意

    node

    代碼和圖示的位置
  • 實作前閉後開,增加一個空白節點
  • 用的配置設定器alloc
  • Iterator

    智能指針,需要知道結點node的next指針
  • 除了array和vector,其他容器的iterator都是一個class
  • iterator

    class 實作
  • 必須做至少5個

    typedef

    ,很多操作符重載
  • 前++

    ++i

    其中i作為對象,

    self& operator++(){}

    傳回引用,這樣可以進行兩次前++
  • 後++

    i++

    self operator++(int){}

    ,阻止兩次後++
  • ++++i

    對的

    ++(++i)

    ;不允許兩次後++

    (i++)++

  • list

    的疊代器解引用,不像vetor直接是資料,而是

    (*iter).data

  • Gnu 4.9

    的改善地方,下圖中有說明:連結清單指向自己
  • G4.9類之間的關系變得複雜

第十五節 疊代器的設計原則和Iterator Traits的作用與設計

  • Iterator

    需要遵循的原則,必須提供5種

    associated types

  • 算法向iterator提問,獲得一些類型type,友善處理
  • 問答式
  • Traits

    特性,特質
  • 算法的參數,可能是iterator或者普通指針,通過中間層traits實作
  • 算法執行時,根據傳入的參數,選擇相應的

    iterator_traits

  • 标準庫中還有其他的traits:

    type traits , char traits, allocator traits, pointer traits, array traits

C/C++基本文法學習

STL

C++ primer