STLコンポーネント

コンテナ vectorとか
汎用アルゴリズム #include 
反復子 iterator   vector::iterator the_iterator;
関数オブジェクト #inculude 
アダプタ  vector::reverse_iterator rit
割り当て子 allocator

イテレータのカテゴリ内容提供元使える演算子
input_iterator(入力反復子)

InputIterator

前方向に値を読み込む。イテレータ自身はインクリメント、比較、逆参照可能。istream

a == b

a != b

*a

a->m

output_iterator(出力反復子)

OutputIterator

前方向に値を書き込む。イテレータ自身はインクリメント、比較、逆参照可能。ostream, inserter

*a = t

*a++ = t

forward_iterator(前方向反復子)

ForwardIterator

前方向に値を読み書きする。これはinputイテレータとoutputoイテレータの機能を合わせたものにイテレータの値を格納する機能を追加したものである。 X a; X()
bidirectional_iterator前後方向に値を読み書きする。forwardイテレータと似ているが、インクリメントもデクリメントもできる。list, map, multimap, set, multiset--a a-- *a--
random_access_iterator

RandonAccessIterator

ランダムアクセスで読み書きする。もっとも強力なイテレータで、両方向イテレータにポインタの演算とポインタの比較の機能を追加したものである。a + n
n + a
n - a
a - b
Supports inequality comparisons (<, >, <= and >=) between iterators a < b
a > b
a <= b
a >= b
Supports compound assignment operations += and -= a += n
a -= n
Supports offset dereference operator ([]) a[n]
array, deque, string, vector


Predefined iterators

reverse_iterator	 Reverse iterator (class template)

Inserter iterators

back_insert_iterator	 Back insert iterator (class template)  
front_insert_iterator	 Front insert iterator (class template)
insert_iterator	 Insert iterator (class template)

定数反復子 vector::iterator
対可変反復子 vector::const_iterator 定数()への参照はできない
読み取りならば、借引数のときにconstを指定した方が良い.

const vector vector2(100, 0) //Initalization
//vector::iterator i = vector2.begin();
vector::const_iterator i = vector2.begin();

コンテナが提供する反復子タイプ

T a[n] T* 可変ランダムアクセス
T a[n] const T* 定数ランダムアクセス
vector<T> vector<T>::iterator 可変ランダムアクセス
vector<T> vector<T>::const_iterator 定数ランダムアクセス
deque<T> deque<T>::iterator 可変ランダムアクセス
deque<T> deque<T>::const_iterator 定数ランダムアクセス
list<T> list<T>::iterator 可変双方向
list<T> list<T>::const_iterator 定数双方向
set<T> set<T>::iterator 定数双方向
set<T> set<T>::const_iterator 定数双方向
multiset<T> multiset<T>::iterator 定数双方向
multiset<T> multiset<T>::const_iterator 定数双方向
map<Key, T> map<Key, T>::iterator 可変双方向
map<Key, T> map<Key, T>::const_iterator 定数双方向
multimap<Key, T> multimap<Key, T>::iterator 可変双方向
multimap<Key, T> multimap<Key, T>::const_iterator 定数双方向

setとmultisetのiteratorが可変でないのは, 格納されているキーを変更するための唯一の方法がキーを削除してから別のキーを挿入するというものだから.

直接値を入れるようなことをすれば正常な順序が保てなくなるので,できないようになっている.


補足その1

元々、イテレータはポインタとそっくりに定義されているので、
たとえば、ヘッダ内の関数はSTL以外、すなわち、ただの関数でも使用可能。
よく見かけるのがfill
#include 
void fill( forward_iterator start, forward_iterator end, const T& val );
                                                                                                                              • -
int dp[row][col]; fill(dp[0], dp[0]+row*col, INF); dp[0] はint*型なので、イテレータと同じように使える。 //fill(dp, dp*row*col, INF)はだめ。 //後使いそうなのが、max_elementとかかな? //findも便利そうではある。 count(flag[0], flag[0]+row*col, false); //falseの数を調べる。
//iter_swap

template 
  void iter_swap ( ForwardIterator1 a, ForwardIterator2 b ); //要素自体をいれかえる。

// advance, distanceのつかいかた。
distanceはset, map, list方面で便利.
//lower~upperまでの範囲の個数を求める関数.
    return (int)distance(validNum.lower_bound(lower), validNum.upper_bound(upper) );

template 
  void advance (InputIterator& i, Distance n);
typename iterator_traits::difference_type
  distance (InputIterator first, InputIterator last);