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 的標準容器庫中提供了一系列的容器模版,可以作為日常工作生產中的資料結構使用,以此減少了程式設計師很多去造輪子的工作量...