深入學習STL系列(2) vector

2021-08-21 09:32:35 字數 3141 閱讀 5341

如果容器是你對stl的唯一印象,說明你利器(stl)在手而未能善用。容器可以分為序列容器(sequential containers)和關聯容器(associative containers)。下面我們將從建立、插入、刪除、檢視五個方面演示如何使用容器。

序列容器中常見的vector、list、deque、priority-queue等。

øvector

vector和陣列很相似,但大小是動態可變的,不需要自己控制。下面我們將以儲存int型元素的vector為例,仔細講解如何使用vector。

---建立vector---

vector

<

int>

iv;            //方式1,構建乙個空的容器物件

vector

<

int>

iv(2, 9);     //方式2,構建乙個包含2個值為9的容器物件

inta[4] = ;

vector

<

int>

iv(a, a+3); //方式3,利用陣列指標構建容器物件(也可以利用其它容器迭代器)

vector

<

int>

iv2(

iv); 

//方式4

,利用其它vector物件構建容器物件

vector

<

int>

iv3=

iv;    

//方式4

的另一種寫法

---插入操作---

iv.push_back

(2); 

//方式1

,在隊尾插入乙個元素

iv.insert

(iv.begin(),5); 

//方式2

,在指定位置插入1個元素

iv.insert

(iv.begin()+1,3, 9);

//方式3

,在指定位置插入多個元素

iv.emplace

(iv.begin(),1);     

//方式4

,在指定位置插入1個元素(效率更高,不建立臨時變數)

iv.emplace_back

(1);           

//方式5

,在隊尾插入1個元素(效率更高,不建立臨時變數)

---刪除操作---

iv.erase

(iv.begin());                        

//方式1

,刪除指定位置的1個元素

iv.erase

(iv.begin(),iv.begin() + 2);    

//方式2

,刪除指定位置的多個元素

iv.pop_back

();                               

//方式3

,刪除隊尾元素

iv.clear

();                                      

//方式4

,清空所有元素

---檢視操作---

iv[1];          //方式1,檢視指定位置的元素(注意防止越界訪問)

iv.at

(1);      

//方式2

,檢視指定位置的元素(從0計數,注意防止越界訪問)

iv.front

();   

//方式3

,檢視頭部的元素

iv.back

();   

//方式4

,檢視尾部的元素

*iv.

begin

();

//方式5

,使用迭代器檢視元素

---遍歷操作---

//從前往後遍歷

for(vector::iteratoriter = iv.begin(); iter++; iter!= iv.end())

//從後往前遍歷

for(vector::iteratoriter = iv.rbegin(); iter++; iter!= iv.rend())

//利用for_each進行遍歷

for_each

(iter.begin(),iter.end(), dosomething);

---其它操作---

il.empty

();  

//判斷容器是否為空

iv.size

();     

//返回容器的size

(大小)

iv.capacity

();    

//返回容器的capacity

(容量)

iv.reserve

(10);  

//調整容器的capacity

為10,如果原值大於10,則不處理

iv.resize

(10);    

//調整容器的size

為10,如果原值大於10,則刪除元素

iv.data

();    

//返回第乙個元素的指標

iv.assign

(5,2);   

//清空所有元素,並插入5

個值為2的元素

iv.assign

(iter1,iter2);//

清空所有元素,並根據迭代器(或陣列指標)進行賦值

iv.swap

(iv2);    

//兩個容器互相交換內容

iv.shrink_to_fi

();//

請求容器減小容量使其足夠用來存放所有有效元素

---注意事項---

當vector的空間動態調整時,並不是在原空間之後增加新的空間,而是以原空間大小的二倍申請新的空間,然後將原內容拷貝過來,然後才在新空間構造新元素,並且釋放原空間。因此,對vector的操作如果引起空間重新配置,則指向原vector元素的所有指標和迭代器都將失效!如果再訪問這些位址,將發生不可**的錯誤。千萬小心!

同時,當進行插入、刪除操作時,操作位置之後的迭代器全部失效!

深入學習STL系列(3) list

list list是一種雙向鍊錶,不同於vector的連續記憶體儲存,它在記憶體中以節點的形式存在,每個節點都存著指向上下節點的指標。下面我們將以儲存int型元素的list為例,仔細講解如何使用list。建立list list int il 方式1,構建乙個空的容器物件 list int ivl 2...

深入學習之函式執行2

after you 23 40 56 function fn var f fn f 10 21 f 20 32 fn 10 先執行fn返回乙個小的函式,然後把小的函式緊接著在執行,並且給n傳遞引數值為10 fn 20 vm4161 4 21 vm4161 4 32 vm4161 4 21 vm416...

TPU深入學習2 How TPU works

執行受過訓練的神經網路以使用標籤對資料進行分類或估計某些缺失值或將來值的過程稱為推理。tpu的目標是加速神經網路的推理環節。為了進行推理,神經網路中的每個神經元都進行以下計算 1 將輸入資料 x 乘以權重 w 以表示訊號強度 2 新增結果彙總神經元的狀態為單精度值 3 應用啟用函式 f 例如relu...