🥗Container

容器

這裡簡單介紹幾個較常用到的容器,包括 : vector, set, map, list, queue, stack。

vector

Vector 可以看成是一個動態陣列 🎄,宣告時可不指定大小,需要時再追加元素😉,而且可以在中間插入(insert)、刪除(erase)元素。不過要注意在數量很大時,插入和刪除效率會不好的,如果有在最前面增加、刪除元素的需求可以用deque(雙端佇列),效率會比較高喔。

引用自:https://larry850806.github.io/2016/06/06/STL1/

用起來跟陣列很像,常用功能有 :

  • push_back : 把一個值加到尾巴

  • pop_back : 把尾巴的值移除掉

  • size : 得到目前長度

  • [] : 得到某一個位置的值

  • insert( vec.begin() + i, a) : 在第i+1個元素前面插入a

  • erase( vec.begin() + i , vec.begin() + j ) //刪除區間 i ~ j-1

set

Set 就是集合內部資料結構為一顆紅黑樹 (red-black tree),裡面的元素都不會重覆,而且都會由小排到大,不過數量多時效率還是會糟的 !

引用自:http://blog.daum.net/_blog/BlogTypeView.do?blogid=0Nu8o&articleno=82&categoryId=7&regdt=20091210122155

基本功能有:

  • insert() : 把一個數字放進集合

  • erase() : 把某個數字從集合中移除

  • count() : 檢查某個數是否有在集合中

map

它提供搜尋和插入友善的資料結構,並具有一對一 mapping 功能:

  • 第一個稱為關鍵字 (key),每個關鍵字只能在 map 中出現一次。

  • 第二個稱為該關鍵字的值 (value)。

Map 的 key-value 對應主要用於資料一對一映射 (one-to-one) 的情況,比如一個班級中,每個學生的學號跟他的姓名就存在著一對一映射的關係。

Map 的特色

  • map 內部資料結構為一顆紅黑樹 (red-black tree),因此:

    • 內部是有排序的資料。

    • 對於搜尋和插入操作友善( O(logn) )。

  • 可以修改 value 值、不能修改 key 值。

  • 以模板(泛型)方式實現,可以儲存任意類型的變數,包括使用者自定義的資料型態 。

引用自 : https://mropengate.blogspot.com/2015/12/cc-map-stl.html

1. 宣告

2. 插入 insert()

3. 尋找 find()

出現時,它返回資料所在位置,如果沒有,返回 iter 與 end() 函數的返回值相同。

引用自:https://mropengate.blogspot.com/2015/12/cc-map-stl.html

4. 刪除與清空

清空 map 中的資料可以用 clear() 函數,判定 map 中是否有資料用 empty() 函數,如果回傳 true 則 map 為空,而資料的刪除用 erase() 函數,它有三種 overload 的用法:

完整範例 :

list

listC++標準程式庫arrow-up-right中的一個arrow-up-right,可以簡單視之為雙向連結串列arrow-up-right,以線性列的方式管理物件集合。list 的特色是在集合的任何位置增加或刪除元素都很快,但是不支持隨機存取。

用法有 :

list.size()

計算長度

list.front()

取得開頭元素

list.back()

取得結尾元素

list.begin()

取得開頭元素之抽象指標

list.end()

取得結尾元素之抽象指標

list.push_front()

增加一個新的元素在 list 的前端

list.pop_front()

刪除 list 的第一個元素

list.push_back()

增加一個新的元素在 list 的尾端

list.pop_back()

刪除 list 的最末個元素

list.insert()

插入一個或多個元素至 list內的任意位置

list.erase()

刪除 list中一個或多個元素

list.reverse()

資料反置

queue

Queue 就像是排隊買東西 只能往尾巴排,然後從頭出來,但是需注意只能操作頭尾。

引用自 : https://pixabay.com/vectors/bank-queue-person-standing-atm-3527570/

基本功能有:

  • push() : 把一個值加到尾巴

  • pop() : 把第一個值移除掉

  • back() : 得到尾巴的值

  • front() : 得到頭的值

stack

Stack 就是一疊盤子,只能拿走最上面的,或是繼續往上疊。

引用自 : https://www.flickr.com/photos/eraphernalia_vintage/3033502393

基本功能有:

  • top() : 得到最上面的值

  • push() : 再拿一個盤子往上疊

  • pop() : 拿掉最上面的盤子

Last updated