STL vector容器(簡述)

2021-08-22 04:30:49 字數 2084 閱讀 2754

vector和c++內建的array是類似的,不同的時array時靜態的,vector則是動態的,可以根據實際進行自動的配置,而array則是不可在改變的。

vector的技術實現主要是其當空間不足時的情況,即擴容和拷貝資料的策略。

vector的結構

templateclass vector

;

當乙個vector建立時是不會分配空間的。

vector第一插入資料,檢查當前end和end_of_storage是一樣的,此時空間不足以插入乙個元素,於是進行擴容。

擴容規則,當第一次擴容2個,後面每次都是原來容量大小的2倍。 當然這個擴容倍數每個平台都是根據自己最優情況定的。

push_back()當容量足夠時,這個操作是在尾部插入乙個元素,其實就是end往後移動了一下。

容量不足時,向申請原來大小兩倍的容量進行擴容,將原資料進行拷貝到新空間,將新元素插入新空間,釋放原來vector空間,重新定義start,end,end_of_storage三個指向。

注意增容的動作,這個動作導致了空間的重新分配,指向原來的vector的所有迭代器全部失效了,不能繼續訪問,否則就是訪問了一塊不屬於自己空間。

erase()方式1,erase( iterator pos )刪除某個位置的節點,其實就是把pos位置後面的都向前移動乙個,然後delete掉pos位置元素,–finish.

a. 就是把pos後每乙個位置向前移動,進行覆蓋

b. 析構掉finish的位置(重複出現了)

c. --finish

方式2,erase( first , last )刪除一段區間的元素(左閉右開),請看下圖

a. 先將last到finish的資料拷貝到以first的位置(將刪除元素後面的拷貝到刪除位置)

b. 析構掉後面重複元素。

c. 將finish位置根據刪除元素向前調整

clear( )1.其實clear就是直接呼叫了earse(vector: :start , vector: :end)

2.clear只是清理了元素,析構物件,改變vector: :end位置,但是不改變vector: :end_of_storage的位置,即vector的容量不變。

insertinsert ( iterator pos ,size_t type, const t&x) ,即從pos開始向其中插入n個x。

2.當被用空間大於新增元素個數:

3.當備用空間小於新增元素個數:

a. 這裡當備用空間小於新增元素的個數時,涉及到上述說過的問題,即空間位置可能變化了,所以此時原來的vector的迭代器可能失效,所以要注意使用。

STL vector容器型別

vector容器型別 vector容器是乙個模板類,可以存放任何型別的物件 但必須是同一類物件 vector物件可以在執行時高效地新增元素,並且vector中元素是連續儲存的。vector的構造 函式原型 templateexplicit vector 預設建構函式,vector物件為空 expli...

STL Vector容器用法

以類模板形式封裝的資料結構,用於儲存資料。標頭檔案 include vector是c 標準模板庫中的部分內容,它是乙個多功能的,能夠操作多種資料結構和演算法的模板類和函式庫。vector之所以被認為是乙個容器,是因為它能夠像容器一樣存放各種型別的物件,簡單地說,vector是乙個能夠存放任意型別的動...

Docker容器(簡述)

什麼是容器 容器時一種輕量級 可移植 自包含的軟體打包技術,使應用程式可以再幾乎任何地方以相同的方式執行 一種虛擬化的方案 作業系統級別的虛擬化 只能執行相同或相似核心的作業系統 依賴於linux核心特性 namespace和cgroup control group 什麼是docker 能將應用程式...