Effective STL - 容器

STL(standard template library)提供了一組表示容器,迭代器,函數對象和算法的模板。容器是一個與數組相似的單元,能夠存若干個值。 node

STL容器是同質的,即存儲的值的類型相同;算法是完成特定任務的處方;迭代器是可以用來遍歷容器的對象,與可以遍歷數組的指針相似,是廣義指針;函數對象是相似於函數的對象,能夠是類對象或函數指針(包括函數名,由於函數名被用做指針)。 算法

STL不是面向對象編程,而是一種不一樣的編程模式-通用編程模式(generic programming)。 編程

1. 慎重選擇容器類型 數組

  • 標準STL序列容器: vector, string, deque 和 list.
  • 標準STL關聯容器:set, multiset, map 和 multimap.
  • 非標準序列容器slist 和 rope.
  • 非標準的關聯容器 hash_set, hash_multiset, hash_map 和 hash_multimap.

  基於算法複雜性考慮: 數據結構

    vector是默認應使用的序列類型;當須要頻繁地在序列中間作插入和刪除操做時,應使用list;當大多數插入和刪除操做發生在序列的頭部和尾部時,deque是應考慮的數據結構。 函數

   STL一種分類方法:連續內存容器(contiguous-memory container)和 基於節點的容器(node-based container)。 spa

 

2. vector  指針

   vector是一個可以存聽任意類型的動態數組,可以增長和壓縮數據。 對象

  • 將元素置於一個動態數組中進行管理
  • 能夠隨機存取元素(用索引直接存取)
  • 在數組尾部添加或移除元素很是快速,可是在中部和頭部安插元素比較費時

  使用說明: 索引

  使用vector前,必須包含頭文件<vector>

  例: vector<int> vec;

        操做:vec.size() //容器實際數據的個數

                vec.begin()//指向迭代器中的第一個數據地址

                vec.capacity() //返回容器中數據的個數

                vec.empty() //判斷容器是否爲空

                vec.front() //返回第一個數據

                vec.push_back(element) //在尾部加入一個元素

                vec.pop_back(element) //刪除最後一個數據

                vec.end() //指向迭代器中末端的下一個,指向不存在元素

3. deque

    是一種具備隊列和棧的性質的數據結構。

  • deque,是 double-ended queue 縮寫
  • 能夠隨機存取元素(用索引直接存取)
  • 在數組尾部添加或移除元素很是快速,可是在中部和頭部安插元素比較費時

4. list

  • 雙向鏈表
  • 不提供隨機存取(按順序走到須要存取的元素,O(n))
  • 在任何位置插入和刪除都很是迅速,內部只需調整一下指針

5.  iterator

  iterator(迭代器) 是一種對象,它可以用愛遍歷標準模板庫容器中的部分或所有元素,每一個迭代器對象表明容器中的肯定地址。迭代器修改了常規指針的接口。

  • 迭代器是一個所謂的智能指針,具備遍歷複雜數據結構的能力。迭代器是一個「可遍歷stl容器內所有或部分元素」的對象
  • 一個迭代器指出容器的一個特殊位置
  • 具備遍歷複雜數據結構的能力

6. 容器的共通能力

   全部容器提供都是value語義,而非reference。容器執行插入元素的操做時,內部實施拷貝動做。因此STL容器內存儲的元素必須可以被拷貝(必須提供拷貝構造函數)。

   每一個容器都提供可返回迭代器的函數,運用返回的迭代器就能夠訪問元素。
  
一般STL不會丟出異常。要求使用運行者對確保傳入正確的參數。

7. 容器的共通操做

   1) 與大小相關的操做函數

        c.size()  傳回容器中的元素數量

        c.empty() 判斷容器是否爲空

        c.max_size() 傳回元素最大可能數量

   2)返回迭代器的函數

        c.begin()

        c.end()

        c.rbegin()  返回一個逆向迭代器,指向逆向尋訪時的第一元素

        c.rend()

相關文章
相關標籤/搜索