1. 程式人生 > >STL詳解(vector,list,deque,stack,queue,priority_queue;map,set)

STL詳解(vector,list,deque,stack,queue,priority_queue;map,set)

STL稱為C++中的標準模板庫

其中包含各種容器:順序容器,關聯容器

順序容器:vector,list, deque, stack,queue,priority_queue;

關聯容器:map,set;

1.        順序容器:

(1).    Vector:類似於陣列,但是無需考慮記憶體分配,vector會隨著元素的增加或減少而自動管理記憶體,程式設計師可通過reserve()成員函式進行干預來管理記憶體;

A.       Reserve():程式設計師告訴vector需要預留多少個元素的儲存空間;

B.       Capacity():返回vector在需要分配更多的儲存空間之前能夠儲存的元素個數—若不重新分配記憶體,當前可容納的元素個數;

C.       Size():當前實際擁有的元素個數;

(2).    List:內部資料結構為雙向環狀連結串列,不能隨機訪問一個元素,但可雙向遍歷,且可動態地增加或減少元素,記憶體管理自動完成。

(3).    deque:雙向開口的連續線性空間。

A.       dequeue對比vector:dequeue為雙向開口的連續線性空間,vector為單向開口的連續線性空間。相對於Dequeue,vector在頭部新增元素時操作效率極差!!!

B.       dequeue對比list:list是一個雙向環狀連結串列,故不能隨機地訪問一個元素,但dequeue是雙向開口的連續線性空間。

注:vector,list,deque是基本容器,而stack,queue,priority_queue是介面卡。

(4).    Stack是可將任意型別的序列容器轉化為一個堆疊,但是一般使用deque作為支援的序列容器。約束:LIFO

(5).    Queue也可以將任意型別的序列容器轉化為一個堆疊,但是一般使用deque作為支援的序列容器。約束:FIFO

(6).    Priority_queue可以將任意型別的容器轉化為一個優先順序佇列,但是一般使用vector作為底層儲存方式。約束:只能訪問第一個元素,不能遍歷整個priority_queue。第一個元素始終為優先順序最高的一個元素。

2.        關聯容器:map,set。

(1).    map:所有元素都根據元素的鍵值被自動排序。Map的所有元素均是pair,第一個元素為鍵值,第二個元素為實值。

Multimap特性與map相同,但是multimap允許鍵值重複。

(2).    set:所有元素都根據元素的鍵值自動排序。Set的元素不像map那樣同時擁有鍵值(key)和實值(value),但是set元素的鍵值就是實值。Set元素不允許兩個元素有相同的鍵值。

Multiset特性與set相同,但是multiset允許鍵值重複。


相關推薦

STL(vector,list,deque,stack,queue,priority_queue;map,set)

STL稱為C++中的標準模板庫 其中包含各種容器:順序容器,關聯容器 順序容器:vector,list, deque, stack,queue,priority_queue; 關聯容器:map,set; 1.        順序容器: (1).    Vector:類似

10、【C++ STL】容器適配器(stack queue priority_queue

pub function 適配 pty str 成員 cto ali The 容器適配器   stack、queue、priority_queue 都不支持任一種叠代器,它們都是容器適配器類型,stack是用vector/deque/list對象創建了一個先進後出容器;qu

STL-vector list deque 順序儲存結構要點

具體使用方法百度一堆,這裡就講講一些要點。都需要加上需加上using namespace std; 方可直接呼叫。使用迭代器時,只有list 的迭代器不會輕易的失效,而vector、deque當插入時,迭代器很容易就失效。vectorvector<int> vec

STL提供了三個最基本的容器:vector,list,deque

 vector和built-in陣列類似,它擁有一段連續的記憶體空間,並且起始地址不變,因此它能非常好的支援隨機存取,即[]操作符,但由於它的記憶體空間是連續的,所以在中間進行插入和刪除會造成記憶體塊的拷貝,另外,當該陣列後的記憶體空間不夠時,需要重新申請一塊足夠大的記憶

STL

STL概貌                                           &n

C++ STL

轉載自:http://www.cnblogs.com/shiyangxt/archive/2008/09/11/1289493.html  一、STL簡介 STL(Standard Template Library,標準模板庫)是惠普實驗室開發的一系列軟體的統稱。它是由Alexan

8、【C++ STL】容器介面卡(stack/queue/priority_queue

容器介面卡     stack、queue、priority_queue 都不支援任一種迭代器,它們都是容器介面卡型別,stack是用vector/deque/list物件建立了一個先進後出容器;queue是用deque或list物件建立了一個先進先出容器;pr

Java進階—— 集合體系List體系有序集合

引言 面嚮物件語言對事物的體現必然是以物件的形式,Java工程師為了方便多多個物件的操作,就對物件進行儲存,集合就是儲存物件的一種方式,他們的底層都是基於不同的資料結構。當然集合和陣列一樣都是容器,陣列也是可以儲存物件的,但是陣列長度一經初始化長度就是固定的,

STL進階--vector vs deque

可能 cati orm real cap als 可用性 () code vector class Dog; // 例 1: vector<Dog> vec(6); // vec.capacity() == 6, vec.size() == 6,

STL容器區別vector,list

最近在面試過程中面試官問道我一個問題,vector和list分別在什麼樣的場景下使用,這樣一問,問的我一頭霧水,回來之後翻了翻網頁,大概總結下這兩種容器的使用場景,也算是給自己一個提醒,做技術時刻得總結總結,而不是臨時抱佛腳。 1.vector vector就是動態

Redis資料結構List(二)

Redis中關於List列表的命令詳解  1、redis中list列表的資料插入命令:lpush,rpush,linsert 127.0.0.1:6379>rpush mylist 1   ---結果為:(integer) 1 127.0.0.1:6379&g

Java集合2:LinkedList和Queue

這位大俠,這是我的公眾號:程式設計師江湖。 分享程式設計師面試與技術的那些事。 乾貨滿滿,關注就送。 今天我們來探索一下LinkedList和Queue,以及Stack的原始碼。 具體程式碼在我的GitHub中可以找到 喜歡的話麻煩star一下哈

《集合list

集合集合:集合是儲存物件資料的集合容器集合比陣列的優勢:1. 集合可以儲存任意型別的物件資料,陣列只能儲存同一種資料型別的資料2. 集合的長度是會發生變化的,陣列的長度是固定的Collection單例集合的根介面List:如果是實現了list介面的集合類,具備的特點:有序,可

(1)List集合 (2)Queue集合 (3)Set集合

異常 泛型 動態數組 表達 操作 線程安全 IT 當前 定義 1.List集合(重中之重)1.1 基本概念 java.util.List接口是Collection接口的子接口,該接口中元素有先後放入次序並允許重復 該接口的主要實現類:ArrayList類、Linke

JAVA常用集合框架用法基礎篇三之Colletion子介面Set

這一篇我們來介紹Collection介面的另一個子介面,Set介面。Set是個介面,元素不可以重複,是無序的。Set介面中的方法和Collection的一致。 A、Set的子類: 1、HashSet:此類實現的Set介面,由雜湊表(實際上是一個HashMap)例項支援,它不保證Set的迭代順

JavaSE基礎(day15)(1)Collection介面(2)List介面(3)Queue介面(4)Set介面

默寫: 1.簡答題 寫出String類中常用的10個方法,要求寫出方法名和功能即可。 2.簡答題 寫出正則表示式中有關數量的規則。 3.畫圖題 畫出集合框架的兩張圖。 今天內容: (1)Collection介面 (2)List介面 (3)Queue介面 (4)Set介面

Java中Map的 entrySet() 以及用法(四種遍歷map的方式)

Entry 由於Map中存放的元素均為鍵值對,故每一個鍵值對必然存在一個對映關係。  Map中採用Entry內部類來表示一個對映項,對映項包含Key和Value (我們總說鍵值對鍵值對, 每一個鍵值對也就是一個Entry) Map.Entry裡面包含getKey()和getValue(

STL 整理(mapsetvectorliststackqueuedequepriority_queue

向量(vector) <vector> 連續儲存的元素<vector> Vector<int>c; c.back()    傳回最後一個數據,不檢查這個資料是否存在。 c.clear()     移除容器中所有資料。 c.empty() 

STLdeque及與vectorlist的區別

在前面已經向大家介紹了vector,vector是單向開口的連續性空間,deque則是一種雙向開口的連續線性空間。所謂雙向開口,意思是可以在頭尾兩端分別作為元素的插入和刪除操作。 deque是在功能上合併了vector和list。    優點:(1) 隨機訪問方便,即支援

C++各個容器比較(vectordequelistsetmapqueuestack

1、vector(連續的空間儲存,可以使用[ ]操作符)可以快速的訪問隨機的元素,快速的在末尾插入元素,但是在序列中間隨機的插入、刪除元素要慢。而且,如果一開始分配的空間不夠時,有一個重新分配更大空間的過程。 2、deque(小片的連續,小片間用連結串列相連,實際上內部有一