在教學的開始,首先,我們要先知道,Vector是什麼 !
成員函式概觀
vector
類別是以容器(Container) 模式為基準設計的,也就是說,基本上它有 begin()
,end()
,size()
,max_size()
,empty()
以及 swap()
這幾個方法。
- 存取元素的方法
vec[i]
- 存取索引值為 i 的元素參照。 (索引值從零起算,故第一個元素是vec[0]。)vec.at(i)
- 存取索引值為 i 的元素的參照,以 at() 存取會做陣列邊界檢查,如果存取越界將會拋出一個例外,這是與operator[]的唯一差異。vec.front()
- 回傳 vector 第一個元素的參照。vec.back()
- 回傳 vector 最尾元素的參照。
- 新增或移除元素的方法
vec.push_back()
- 新增元素至 vector 的尾端,必要時會進行記憶體配置。vec.pop_back()
- 刪除 vector 最尾端的元素。vec.insert()
- 插入一個或多個元素至 vector 內的任意位置。vec.erase()
- 刪除 vector 中一個或多個元素。vec.clear()
- 清空所有元素。
- 取得長度/容量
vec.size()
- 取得 vector 目前持有的元素個數。vec.empty()
- 如果 vector 內部為空,則傳回 true 值。vec.capacity()
- 取得 vector 目前可容納的最大元素個數。這個方法與記憶體的配置有關,它通常只會增加,不會因為元素被刪減而隨之減少。
- 重新配置/重設長度
vec.reserve()
- 如有必要,可改變 vector 的容量大小(配置更多的記憶體)。在眾多的 STL 實做,容量只能增加,不可以減少。vec.resize()
- 改變 vector 目前持有的元素個數。
- 疊代 (Iterator)
vec.begin()
- 回傳一個Iterator,它指向 vector 第一個元素。vec.end()
- 回傳一個Iterator,它指向 vector 最尾端元素的下一個位置(請注意:它不是最末元素)。vec.rbegin()
- 回傳一個反向Iterator,它指向 vector 最尾端元素的。vec.rend()
- 回傳一個Iterator,它指向 vector 的第一個元素。
T 是 vector 要儲存的物件集合的型別,該 vector 的變數名稱是 v。T 可以是任何符合 Copy/Move Assignable 條件的型別,包括使用者自訂型別。如果 T 不符合 Copy / Move Assignable 或者複製 / 移動成本很高昂,可以考慮使用 T* 甚至 std::unique_ptr<T> 來代替 T。
---------------------------------------------------------------------------------------------------------------------------------------------------
其實說白了,你可以把它想像成是Array 的進階,本來在還沒看維基百科之前,是有手寫一些內容想要當教學的,不過似乎維基百科的內容更貼切,所以就直接以維基百科的內容為主。
這邊一樣給出一個題目當練習,是之前在網路上看到的一個題目。
Q :
Find all numbers disappeared in an Array
Description :
Given an array of integers where 1 <= a[i] <= n ( n = size of array ) , some elements appear twice and others appear once. Find all the elements of [1,n] inclusive that do not appear in this array ;
Example :
Input : [ 4,3,2,7,8,2,3,1 ]
Output;[ 5, 6 ]
留言列表