STLの基本要素
他のオブジェクトを格納するオブジェクト。
連想コンテナ (associative container)
- map … キーと値のペアを格納するコンテナ (1つのキーは、1つの値に対応)
- multimap … キーと値のペアを格納するコンテナ (1つのキーは、1つ以上の値に対応)
- set … 要素の重複が許されない集合
- multiset … 要素の重複が許される集合
文字列
アルゴリズム (algorithm)
コンテナ内の要素の操作。
コピー
- copy
- copy_backward
- iter_swap
- fill、fill_n
- swap
- swap_ranges
- search、search_n
ソートされていないシーケンスの検索
- adjacent_find
- equal
- find
- find_end
- find_if
- find_first_of
- mismatch
要素の置換と削除
- remove
- remove_if
- remove_copy
- remove_copy_if
- replace
- replace_if
- replace_copy
- replace_copy_if
- unique
- unique_copy
シーケンスの並び順の変更
- rotate
- rotate_copy
- random_shuffle
- partition
- reverse
- reverse_copy
- stable_partition
ソート
- nth_element
- sort
- stable_sort
- partial_sort
- partial_sort_copy
ソート済みシーケンスの検索
- binary_search
- lower_bound
- upper_bound
- equal_range
ソート済みシーケンスのマージ
集合演算
- includes
- set_difference
- set_intersection
- set_symmetric_difference
- set_union
ヒープ演算
- make_heap
- push_heap
- pop_heap
- sort_heap
最小値と最大値
- max
- max_element
- min
- min_element
順列 (Permutations)
- next_permutation
- prev_permutation
シーケンスの変換と生成
- generate、generate_n
- transform
その他
- count
- count_if
- for_each
- lexicographical_compare
反復子とはポインタを抽象化したもので、コンテナ内の要素の移動に使えます。
反復子 |
設定 |
取得 |
アクセス方向 |
ランダムアクセス反復子 (random access iterator) |
○ |
○ |
ランダム |
双方向反復子 (bidirectional iterator) |
○ |
○ |
前方または後方 |
前方反復子 (forward iterator) |
○ |
○ |
前方 |
入力反復子 (input iterator) |
× |
○ |
前方 |
出力反復子 (output iterator) |
○ |
× |
前方 |
コンテナによって、提供される反復子が異なります。
- vector … ランダムアクセス
- list … 双方向
- deque … ランダムアクセス
- string … ランダムアクセス
- set … 双方向
- multiset … 双方向
- map … 双方向
- multimap … 双方向
またアルゴリズムによって、要求する反復子が異なります。
逆方向反復子 (reverse iterator) / 反転反復子
逆方向に移動する反復子です。この反復子では、反復子をp++とするとデクリメントとなります。reverse_iterator クラス | MSDN
たとえばvectorコンテナのvを順方向にループする処理を、
for (std::vector<int>::iterator p = v.begin(); p != v.end(); p++)
とすると、これを逆方向にするには次のようにします。
for (std::vector<int>::reverse_iterator p = v.rbegin(); p != v.rend(); p++)
関数
関数 - <iterator> | MSDN
begin()
コンテナの最初の要素への反復子を取得できます。
template<class Container>
auto begin(Container& cont) -> decltype(cont.begin());
template<class Container>
auto begin(const Container& cont) -> decltype(cont.begin());
template<class Ty, class Size>
Ty *begin(Ty (&array)[Size]);
begin | MSDN
参考
参考書
- プログラミング言語C++ 第3版 [アジソン・ウェスレイ・パブリッシャーズ・ジャパン] Bjarne Stroustrup
17章「標準コンテナ」、18章「アルゴリズムと関数オブジェクト」、19章「反復子とアロケータ」