STLの基本要素

コンテナ (container)

他のオブジェクトを格納するオブジェクト。

シーケンスコンテナ (sequence container)

連想コンテナ (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

ソート済みシーケンスのマージ

  • merge
  • inplace_merge

集合演算

  • 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

反復子 (iterator) / イテレータ

反復子とはポインタを抽象化したもので、コンテナ内の要素の移動に使えます。

反復子 設定 取得 アクセス方向
ランダムアクセス反復子 (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章「反復子とアロケータ」
Microsoft Learnから検索