創作內容

9 GP

vector簡單用法整理

作者:驥哥│2018-08-23 21:54:59│巴幣:18│人氣:2630
這幾天STM8晶片卡關的時候都在看C++Primer,剛好有看到之前比較不熟的vector所以整理一下基本的用法
第一次寫心得文,如果有什麼錯誤請見諒,可以大力ㄉ糾正我。

● 首先介紹一下Vector是什麼ㄋ?
vector是標準模板庫(Standard Template Library)STL的其中一種,他能表示一個對象的集合,vector裡面所有對象的種類都是相同ㄉ,說簡單一點他有點類似進階版的陣列,但4她裡面放的元素通常只能限定一種資料型態。說定義好像還4有點模糊,等等看用法的時候會清楚一點~

●標頭檔
若是要使用vector的話我們需要使用vector的標頭檔,並且它是屬於std的命名空間:

#include <iostream>
#include <vector>
using namespace std;
度,這樣我們就做好準備ㄌ,接著我們來看看宣告ㄉ部分

●定義以及初始化我們的vector
先來大概介紹一下,vector是屬於類別範本(class template)的一種,所以使用方式跟以前的陣列或者函數都有些許的不同,這邊先不管class template要怎麼做出來,窩們先了解怎麼使用他(因為我也不會)。
首先先來個簡單的,如下圖:

vector<int> v1;
這是最基本的用法了,我們定義一個vector叫做v1,它裡面只能裝int。
下方這一個vector使用string來定義,讓大家知道我的v2裡面只能裝string。
像這樣我們就會最基本的vector了,很簡單吧

vector<string> v2;
接著我們來看一點進階的用法,如下圖:
vector<int> v1;//先創立一個空的vector
vector<int> v2=v1;
vector<int> v3(v1);
我們先看到了上面的第二行,他就是很直觀的v2把v1的所有元素複製過來,用一個等號表示。
而第三行如第二行,這行的意思等價vector<int> v3=v1,也是將v1的所有元素複製過來的意思。

這邊要注意一個地方:若要複製vector只能<>內的資料型態一樣才可以達成,以下的寫法就是不合法的。

vector<int> v1;
vector<string> v3(v1);//這樣是不合法的,因為v3指定要用string,而v1是使用int。

豪這樣基本介紹的差不多ㄌ,我們要開始用定義ㄉ方式丟一些東西到vector裡面ㄌ。
vector<int> v1{87,88,89};
vector<int> v2={87,88,89};
這兩者基本上4相同的,他的概念就是我的vector裡面有三個數,依序是87,88,89。
再來我們來一個string的範例如下圖,跟上方ㄉ範例一樣,不過int改成了string。

vector<string> s1{"薯""條""控"};
vector<string> s2={"薯""條""控"};

●建立指定數量的元素
大家看到這邊可能有個疑問,如果我們vector要塞很多資料ㄋ?
是不是也要用{}一個一個塞?不能跟陣列一樣一次開很多空間嗎?
這時候我們就會用到vector內部建立指定數量的元素的用法ㄌ,先來看個範例:

vector<int> v1(10,87);
//代表我的v1內部有10個元素,每個的初始值都是87
vector<string> s1(15,"薯條控");
//代表我的s1裡面有15個元素,每個元素都4薯條控!

這邊就又有一個疑問了,我們的(,)內部有兩個參數,若是我們只填一個呢?
vector<int> i1(15);
//代表i1有15個元素,因為沒給系統要初始化的值,所以它的內容是0(自動初始化)。
vector<string> s1(20);
//代表s1有20個元素,每個都是空字串,理由同上。
,醬子我們關於宣告指定數量vector也學得差不多ㄌ,來考考大家。下面這四個分別代表什麼ㄋ?

vector<int> v1(10);

vector<int> v2{10};

vector<int> v3(10,1);

vector<int> v4{10,1};

這邊有個比較容易錯ㄉ地方,順帶提出來跟大家分享一下

vector<string> s1{10};
vector<string> s2{15,"薯條控"};

大家有注意到奇怪的地方嗎?我們通常用{}就是要指定元素,但是在第一行我們給的是10,而不是"10",在系統內會被當成int。
這樣不是很奇怪ㄇ?我們建立了一個string的vector,但是我們跟他說第一個元素要用int的10,所以系統會直接幫你改成這樣,如下圖,所以請大家使用的時候務必分清楚()跟{}喔!

vector<string> s1{10};
//直接視為vector<string> s1(10)
//代表s1有10個空字串作為元素
vector<string> s2{15,"薯條控"};
//直接視為vector<string> s2(15,"薯條控");
//有15個名為薯條控ㄉ元素的字串vector

●向vector添加元素
這時候我們要進入重頭戲ㄌ,做所有的操作都要我們的vector裡面有東西給我們用,在一開始我們還不知道vector內要用多少空間的時候,我們都習慣創立空的vector,在需要的時候把元素放進去。範例:

vector<int> v1;//我們目前還不知道要多少空間,所以用空的

for(int i=0;i<100;i++)
      v1.push_back(i);


這邊我們又看到了新東東,push_back()。
這東西很簡單,就是在vector的最後面再加上()裡面的東西,所以經過上面的程式碼,我們的v1裡面應該會有100個元素,從0~99。接著我們把它顯示出來!

cout<<"v1的元素有:"<<endl;
for(auto i:v1)
   cout << i << " ";

cout<<endl;
度,就這樣,我們就可以看到剛剛填入的0~99了

●vector的其他操作

v1.empty()
若v1是空vector,會回傳1,否則回傳0

v1.size()
回傳此vector的元素個數。

v1[n]
引用v1的第n個元素,作法跟陣列相同,但有些地方不一樣,下方會補充

v1={a,b,c....}
從第0個元素替換v1原本的元素

●其他操作的一些補充:
若我們要使用v1[n],能對我們已知的元素進行操作!!
錯誤例子:

vector<int> v1;//空vector
for(decltype(v1.size()) i=0;i<10;i++)
    v1[i]=i;//
這是非常錯誤的!因為我們的v1是個空集合,所以沒辦法索引v1[i]到底是甚麼

正確示範:
vector<int> v1;//空vector
for(decltype(v1.size()) i=0;i<10;i++)
    v1.push_back(i);
要添加元素只能使用push_back來增加

再來幾個錯誤的示範:
vector<int> v2;
cout<<v2[5]<<endl;
///v2[5]不存在!!!

vector<int> v3(100)
cout<<v3[100]<<endl;
//錯誤!!因為我們的索引值是0~99,這部分跟陣列的觀念類似!

好了這次的介紹差不多就到這裡ㄌ,第一次發心得文麻煩大家砲轟的小力一點XD
引用網址:https://home.gamer.com.tw/TrackBack.php?sn=4104979
All rights reserved. 版權所有,保留一切權利

相關創作

留言共 6 篇留言

萬里磁鐵貓
@薯條控

08-23 21:56

萬里磁鐵貓
可以看看iterator
使用上更靈活 但是好像比較慢

08-23 21:57

驥哥
RRR剛剛沒看到 窩那部份還沒看完不敢寫XD 怕寫錯 過陣子我補一個
08-23 23:38

推推拉 辛苦啦!!!!

08-23 23:18

驥哥
不會不會,當讀書筆記還不錯
08-23 23:38
廢物敗類窩囊廢
學到ㄌ 感謝ㄉㄉ

08-23 23:48

驥哥
豪XD
08-24 14:45
薯條控
磁神懂多 標我是要笑我ㄅ==

08-24 00:15

驥哥
阿條直接接力把功略補齊R08-24 14:45
パっパっパスタ
我最近也開始學<vector>
真的收穫良多
還好之前有先收藏起來 ><

04-01 17:22

我要留言提醒:您尚未登入,請先登入再留言

9喜歡★leichitw 可決定是否刪除您的留言,請勿發表違反站規文字。

後一篇:stringstream...

追蹤私訊切換新版閱覽

作品資料夾

leo25127更新至1221回
穿越奇幻日常系小說『公爵家的獨生子』更新囉,來看看我們無厘頭的ㄎ一ㄤ少爺怎麼在異世界作威作福吧!看更多我要大聲說昨天18:06


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】