c STL庫容器之向量vector

2021-08-18 05:29:28 字數 1661 閱讀 5834

vector向量是一種順序行容器。

相當於陣列,但其大小可以不預先指定,並且自動擴充套件。它可以像陣列一樣被操作,由於它的特性我們完全可以將vector 看作動態陣列。

在建立乙個vector 後,它會自動在記憶體中分配一塊連續的記憶體空間進行資料儲存,初始的空間大小可以預先指定也可以由vector 預設指定。當儲存的資料超過分配的空間時vector 會重新分配一塊記憶體塊,但這樣的分配是很耗時的,在重新分配空間時它會做這樣的動作:

首先,vector 會申請一塊更大的記憶體塊;

然後,將原來的資料拷貝到新的記憶體塊中;

其次,銷毀掉原記憶體塊中的物件(呼叫物件的析構函式);

最後,將原來的記憶體空間釋放掉。

當vector儲存的資料量很大時,如果此時進行插入資料導致需要更大的空間來存放這些資料量,那麼將會大大的影響程式執行的效率,所以我們應該合理的使用vector。

vectorv1;            // 預設的初始化方式,內容為空

vectorv2(v1);      // v2是v1的乙個副本

vectorv3(n, i);  // v3中包含了n個數值為i的元素

vectorv4(n);       // v4中包含了n個元素,每個元素的值都是0

(1)標頭檔案#include.

(2)建立vector物件,vectorvec;

(3)尾部插入數字:vec.push_back(a);

(4)使用下標訪問元素,cout<

(5)使用迭代器訪問元素.

(6)插入元素:    vec.insert(vec.begin()+i,a);        在第i個元素後面插入a;

(7)刪除元素:    vec.erase(vec.begin()+2);          刪除第3個元素

vec.erase(vec.begin()+i,vec.end()+j);           刪除區間[i,j-1];區間從0開始

(8)向量大小:vec.size();

(9)清空:vec.clear()   //清空之後,vec.size()為0

empty():判斷向量是否為空,為空返回真,否則為假

clear():清空向量

front():返回得到向量的第乙個元素的資料

back():返回得到向量的最後乙個元素的資料

size():返回得到向量中元素的個數

push_back(資料):將資料插入到向量的尾部

pop_back():刪除向量尾部的資料

.....

#include #include using namespace std;

//這裡我們抽象出乙個函式,用來列印vec裡的資料

void print(vectorvec)

//列印複製後vec的大小

cout << "賦值後vec的大小" << vec.size() << endl;

//用陣列方式遍歷向量vec

cout << "用陣列方式遍歷向量vec: " <::iterator iter="vec.begin();

c STL庫容器之map

map是stl的乙個關聯容器,它的特點是增加和刪除節點對迭代器的影響很小,除了那個操作節點,對其他的節點都沒有什麼影響。對於迭代器來說,可以修改實值,而不能修改key。它提供一對一 其中第乙個可以稱為關鍵字,每個關鍵字只能在map中出現一次,第二個可能稱為該關鍵字的值 的資料處理能力,由於這個特性,...

c STL庫容器之集合set

set是stl中一種標準關聯容器,其鍵值就是實值,實值就是鍵值,不可以有重複,所以我們不能通過set的迭代器來改變set的元素的值。它底層使用平衡的搜尋樹 紅黑樹實現,插入刪除操作時僅僅需要指標操作節點即可完成,不涉及到記憶體移動和拷貝,所以效率比較高。set,顧名思義是 集合 的意思,在set中元...

C STL標準庫容器 概覽

本文對c 中的stl標準庫容器進行概覽,作為筆者平時的學習筆記,以茲備忘。同時,本文作為乙個目錄,接下來對常用容器,比如vector,map等的 具體介紹的博文將會由本文進行索引。c 的標準容器庫中提供了一系列的容器模版,可以作為日常工作生產中的資料結構使用,以此減少了程式設計師很多去造輪子的工作量...