1. 程式人生 > >C++ STL相關容器詳解

C++ STL相關容器詳解

vector:

一種隨機訪問的陣列型別,他提供了對陣列元素的快速、隨機訪問,以及在序列尾部快速、隨機的插入和刪除

操作。它在需要時可以改變其大小,也就是說大小可變的向量,比較靈活。可取代C++語言本身提供的傳統陣列。提

供隨機儲存能力。操作尾端元素的速度最快。由於所有元素佔用連續空間,所以一旦進行插入或者刪除動作,有可能

使原本的某些 iterators失效。

list:

這是一個雙向連結串列容器,完成了標準的C++資料結構中連結串列的所有功能。它不支援隨機訪問的陣列型別,因

為STL以雙向連結串列的方式實現list物件,所以訪問連結串列元素要指標從連結串列的某個端點開始。插入和刪除操作所花的

時間是固定的,也就是說,list物件插入和刪除一個元素所需要的時間與該元素在連結串列中的位置無關。在任何位置

做插入和刪除動作都很快,不像vector只侷限於尾端,而deque只侷限於兩端才有高效率。由於各元素並不佔用連

續空間,所以一旦進行插入或者刪除動作,原本的iterators任然有效。注意,許多隻在元素搬移的STL algorithms 

用於list身上會有不佳的效率。幸好這些STL algorithms 都有對應的list member functions 可以替代。後者之所以會

有比較好的效率,原因是他們只操作指標,而非真正去拷貝或者移動元素。

queue:

這是一種佇列容器,它採用deque和list物件建立一個先進先出(FIFO)的容器,它實際上完成了標準的C++資料

結構中的佇列所有功能。不提供隨機儲存能力。行為與特性都很類似vector,但因為是雙向開口,所以操作兩端元素

的速度都很快,不像vectoer只在操作尾端元素時才有高效率。由於所有元素佔用連續空間,所以一旦進行插入或者

刪除動作,有可能是原本的某些iterators失效。

stack:

這是一種棧容器,完成了標準的C++資料結構中棧的所有功能。也就是說,它通過vector、deque或者list物件

建立了一個先進後出的容器。stack特性是先進後出(FILO: First In, Last Out)。

deque:

這是一種隨機訪問的資料型別,提供了在序列兩端快速插入和刪除操作的功能,他可以再需要的時候修改器自

身大小。也就是說這是一種雙端佇列容器,完成了標準的C++資料結構中佇列的所有功能。queue特性是先進先出。

priority_queue:

這是一種按值排序的佇列容器。它使用vector或者deque物件建立了一個排序佇列。priority_queue特性是依優

先權來誰是下一個元素。

set:

這是一種隨機存取的集合容器。其關鍵詞和資料元素是同一個值,也就是說它不能包含重複的元素。set經過

排序的結構體,以某個可指定的排序方式排序,每個元素第一無二。由於已經排序,所以搜尋速度極快。但也因此

不允許我們直接修改某個元素的內容,因為這可能會影響排序。修改元素內容的正確的作法是,先將該元素刪除,

再加入(此時使用新值)。set通常是以平衡二叉樹(balanced binary tree)來儲存(但並不是強制規定),甚至是以

red-black trees來完成。

multiset:

其關鍵詞和資料元素也是同一個值,但和set不同的以及最大的區別在於這是一種允許出現重複元素的集合容

器。multiset允許元素重複。

map:

其是一種關聯陣列容器,它包含成對資料的容器,其中一個值是實際資料值,另外一個是用來尋找資料的關

鍵值,一個特定的關鍵詞只能與一個元素相關聯。map是由一對一對的鍵值(key/value)所組成的排序結構體,

鍵值獨一無二。map通常是以balanced binary tree來實現,但並不強制規定。事實上map的內部結構通常與set

是一樣的,因此我們可以將set視為一種特殊的map,其鍵值和實值是相同的,所以map和set幾乎擁有完全相同

的能力。

multimap:

  這是一種允許出現重複關鍵之的關聯陣列容器,然而與map物件不同,它的一個關鍵詞可以與多個元素相聯

系,multimap允許鍵值重複。

hash table:

這並不是C++ Standard規範內的一容器(因標準委員會作業時間的關係),但是它對於大量資料的搜尋而言,

很實用也很重要。有許多STL實作品例如SGI都涵蓋了它。通常STL產品廠商會提供4中hash tables: hash_set、

hash_multiset、hash_map、hash_multimap。

相關推薦

C++ STL相關容器

vector: 一種隨機訪問的陣列型別,他提供了對陣列元素的快速、隨機訪問,以及在序列尾部快速、隨機的插入和刪除 操作。它在需要時可以改變其大小,也就是說大小可變的向量,比較靈活。可取代C++語言本身提供的傳統陣列。提 供隨機儲存能力。操作尾端元素的速度最快。由於所

C++ STL string 用法

一、string的初始化 首先,為了在程式中使用string型別,必須包含標頭檔案 <string>。如下: #include <string> 注意這裡不是string.h,string.h是C字串標頭檔案。 string類是一個模板類

C++ STL vector 用法

介紹 vector是表示可變大小陣列的序列容器。 就像陣列一樣,vector也採用的連續儲存空間來儲存元素。也就是意味著可以採用下標對vector的元素進行訪問,和陣列一樣高效。但是又不像陣列,它的大小是可以動態改變的,而且它的大小會被容器自動處理。 本質講

STL List容器

List 容器 list是C++標準模版庫(STL,Standard Template Library)中的部分內容。實際上,list容器就是一個雙向連結串列,可以高效地進行插入刪除元素。 使用list容器之前必須加上<vector>標頭檔案:#inclu

[C++ STL] vector使用

一、vector介紹: deque(雙端佇列)是一個動態陣列,可以向兩端發展,因此不論在尾部或頭部安插元素都十分迅速。 在中間部分安插元素則比較費時,因為必須移動其它元素。 二、用法 1、標頭檔案 #include <deque> //deque屬於std命名域的,因此需要通過命名限定

[C++ STL] deque使用

一、deque介紹: deque(雙端佇列)是一個動態陣列,可以向兩端發展,因此不論在尾部或頭部安插元素都十分迅速。 在中間部分安插元素則比較費時,因為必須移動其它元素。 二、用法 1、標頭檔案 #include <deque> //deque屬於std命名域的,因此需要通過命名限定,

[C++ STL] list使用

一、list介紹: List由雙向連結串列(doubly linked list)實現而成,元素也存放在堆中,每個元素都是放在一塊記憶體中,他的記憶體空間可以是不連續的,通過指標來進行資料的訪問,這個特點使得它的隨機存取變得非常沒有效率,因此它沒有提供[]操作符的過載。但是由於連結串列的特點,它可以很有效率

[C++ STL] map使用

一、set介紹: Map由紅黑樹實現,其元素都是“鍵值/實值”所形成的一個對組(key/value pairs)。每個元素有一個鍵,是排序準則的基礎。每一個鍵只能出現一次,不允許重複。 Map主要用於資料一對一對映(one-to-one)的情況,map內部自建一顆紅黑樹(平衡二叉樹中的一種),這顆樹具有對

JAVA學習筆記(併發程式設計 - 陸)- J.U.C之AQS及其相關元件

文章目錄 J.U.C之AQS-介紹 關於AQS裡的state狀態: 關於自定義資源共享方式: 關於同步器設計: 如何使用: 具體實現的思路: 設計思想: 基於AQS的同步元件: AQS小結:

C++ LIST容器

STL之list容器詳解 List 容器 list是C++標準模版庫(STL,Standard Template Library)中的部分內容。實際上,list容器就是一個雙向連結串列,可以高效地進行插入刪除元素。 使用list容器之前必須加上<vector>標頭檔案:#in

C++容器

什麼是容器 首先,我們必須理解一下什麼是容器,在C++ 中容器被定義為:在資料儲存上,有一種物件型別,它可以持有其它物件或指向其它對像的指標,這種物件型別就叫做容器。很簡單,容器就是儲存其它物件的對 象,當然這是一個樸素的理解,這種“物件”還包含了一系列處理“其它物件”的方法,因為這些方法在程式

STL之vector容器

vector 容器 vector是C++標準模版庫(STL,Standard Template Library)中的部分內容。之所以認為是一個容器,是因為它能夠像容器一樣存放各種型別的物件,簡單的說:vector是一個能夠存放任意型別的動態陣列,能夠增加和壓縮資料。 使用vector容器之前必須

C++學習:list容器(一)

list容器詳解       首先說說STL         STL就是Standard Template Library,標準模板庫。這可能是一個歷史上最令人興奮的工具的最無聊

STL 之 vector 容器

vector是C++標準模版庫(STL,Standard Template Library)中的部分內容。之所以認為是一個容器,是因為它能夠像容器一樣存放各種型別的物件,簡單的說:vector是一個能夠存放任意型別的動態陣列,能夠增加和壓縮資料。 使用vector容器之前必須加上標頭檔案:#include&

c++ STL 常用容器元素型別相關限制 指標 引用

http://blog.csdn.net/ginewar/article/details/20247215   c+

C/C++中extern關鍵字

編譯器 fin 生成 接口 bcd 只需要 c++環境 結束 編程 轉自:http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777431.html 1 基本解釋:extern可以置於變量或者函數前,以標示變量或者

C++ STL容器的選擇

但是 函數 pair list 成員 cto 允許 數據 結構 c++提供了各具特長的容器,那麽我們該如何選擇最佳的容器? 缺省狀態下應該選擇vector,因為vector內部結構最簡單,並允許隨機存取,所以數據的存取十分方便,數據的處理也快。 如果經常要在頭部和尾部安插

跨域問題相關知識(原生js和jquery兩種方法實現jsonp跨域)

syn con 加載 developer 兩種方法 ray exe 編寫 分組 1、同源策略 同源策略(Same origin policy),它是由Netscape提出的一個著名的安全策略。同源策略是一種約定,它是瀏覽器最核心也最基本的安全功能,如果缺少了同源策略,則瀏覽

C/C++中作用域(轉)

防止 局部作用域 gist 文件中 方式 為什麽不使用 形式參數 lan archive 作用域規則告訴我們一個變量的有效範圍,它在哪兒創建,在哪兒銷毀(也就是說超出了作用域)。變量的有效作用域從它的定義點開始,到和定義變量之前最鄰近的開括號配對的第一個閉括號。也就是說,作

C# Process.Start()方法

stat 字符串 檔案 atd 一個 用戶名 菜單 簡單介紹 run System.Diagnostics.Process.Start(); 能做什麽呢?它主要有以下幾個功能: 1、打開某個鏈接網址(彈窗)。 2、定位打開某個文件目錄。 3、打開系統特殊文件夾,如“控制面板