STL 容器

序列容器

array

可用方法

STL容器通用方法

隨機存取容器通用方法

有序容器通用方法

vector

vector是一個動態陣列,可以用常數的時間在結尾增刪物件
定義:

template<
    class T,
    class Allocator = std::allocator<T>
> class vector;

初始化

vector初始化參數有兩個部分,都可省略
1. 初始資料
2. 分配器
初始資料可以是"另一個vector"或"數量, 初始值"
(若T()有意義則初始值可省略)

可用方法

STL容器通用方法

隨機存取容器通用方法

有序容器通用方法

動態序列容器通用方法

data
T* data()

取得底層陣列的開頭指標
容器為空時可能回傳空指標也可能回傳有效指標

capacity
size_t capacity()

取得已分配內存大小

reserve
void reserve(size_t capacity)

預先申請內存

shrink_to_fit
void shrink_to_fit()

釋放多餘內存以符合元素數量

deque

deque是一個動態雙向序列,可以用常數的時間在頭尾增刪物件
定義:

template<
    class T,
    class Allocator = std::allocator<T>
> class deque;

初始化

vector初始化參數有兩個部分,都可省略
1. 初始資料
2. 分配器
初始資料可以是"另一個deque"或"數量, 初始值"
(若T()有意義則初始值可省略)

可用方法

STL容器通用方法

隨機存取容器通用方法

有序容器通用方法

動態序列容器通用方法

shrink_to_fit
void shrink_to_fit()

釋放多餘內存以符合元素數量

forward_list

可用方法

STL容器通用方法

list

可用方法

STL容器通用方法

有序容器通用方法

動態序列容器通用方法

容器適配器

stack

可用方法

queue

可用方法

priority_queue

可用方法

關聯容器

set/multiset

可用方法

STL容器通用方法

有序容器通用方法

insert
iterator insert(const T& value)
iterator insert(iterator source_begin, iterator source_end)

在容器插入一個或多個值,並回傳插入的值的位置

map/multimap

可用方法

STL容器通用方法

有序容器通用方法

unordered系列


注1: 複雜度未特別說明則皆指時間,且 代表完成操作後容器內元素數量
注2: 若無標明複雜度默認為常數時間
注3: 多數容器皆定義於同名標頭檔內,只有multi系列的和不是multi的在相同標頭檔
注4: 許多函數允許傳入 const T& 和 T&& ,有些可能只寫了其中一個,但其實都可以

STL容器通用方法

empty
bool empty()

判斷是否為空

swap
void swap(container &other)

與另一容器交換資料

get_allocator
allocator get_allocator()

取得分配器
array沒有這個方法

clear
void clear()

清空容器
array沒有這個方法

begin
iterator begin()

取得指向開頭的迭代器

end
iterator end()

取得指向結尾的迭代器

cbegin
const_iterator cbegin()

取得指向開頭的常迭代器

cend
const_iterator cend()

取得指向結尾的常迭代器

隨機存取容器通用方法

T& operator[](size_t index)
用索引取得值
存取越界時是未定義行為

at
T& at(size_t index)

用索引取得值
存取越界時拋出std::out_of_range

front
T& front()

取得第一個值
容器為空時是未定義行為

back
T& back()

取得最後一個值
容器為空時是未定義行為

有序容器通用方法

size
size_t size()

取得元素數量

rbegin
iterator rbegin()

取得指向反向開頭的迭代器

rend
iterator rend()

取得指向反向結尾的迭代器

crbegin
const_iterator crbegin()

取得指向反向開頭的常迭代器

crend
const_iterator crend()

取得指向反向結尾的常迭代器

動態序列容器通用方法

resize
void resize(size_t count, const T& value)

改變容器的大小,並當count>目前大小時在多出來的格子填入value
如果省略value則不對多出來的格子做處理

vector可能會因為重分配導致複雜度變大

assign
void assign(size_t count, const T& value)
void assign(iterator source_begin, iterator source_end)

在容器中覆蓋指定數量的特定值或一個range的資料

insert
iterator insert(cons_iterator pos, const T& value)
iterator insert(cons_iterator pos, size_t count, const T& value)
iterator insert(cons_iterator pos, iterator source_begin, iterator source_end)

在容器的指定位置插入一個或多個值,並回傳插入的第一個值的位置
list:
vector:
deque:

emplace
iterator emplace(const_iterator pos, Args&&... args )

用args作為參數建構一個物件並插入容器的指定位置,再回傳插入的值的位置
list:
vector:
deque:

erase
iterator erase(const_iterator pos)
iterator erase(const_iterator pos_begin, const_iterator pos_end)

刪除指定區域的值並回傳刪除區域後的第一個值的位置
list:
vector:
deque:

push_back
void push_back(const T& value)
void push_back(T&& value)

在容器的結尾插入一個值

emplace_back
void emplace_back(Args&&... args)

用args作為參數建構一個物件並插入容器的結尾

pop_back
void pop_back()

在容器的結尾刪除一個值

push_front
void push_front(const T& value)
void push_front(T&& value)

在容器的開頭插入一個值
vector沒有這個方法

emplace_front
void emplace_front(Args&&... args)

用args作為參數建構一個物件並插入容器的開頭
vector沒有這個方法

pop_front
void pop_front()

在容器的開頭刪除一個值
vector沒有這個方法