反復子

クラス X が反復子となる要件を示す。(STL 18章より)

表記

入力反復子

X(a)コピーコンストラクタで、X(a)==a を満たす。要デストラクタ。
X u(a)結果として u==a となる。
X u = a同上。
a == b等値関係。*a == *b であること。結果は bool。
a != b!(a==b) と同じでなければいけない。
*a参照外し。結果は T。
++r結果は const X&。末尾直後以外の場合、値は参照外し可能か末尾直後となる。
r++結果は const X&。{X x = r; ++r; return x;} と同等であること。
*++r結果は T。
*r++結果は T。

出力反復子

X(a)*a = t は *X(a) = t と同等であること。要デストラクタ。
X u(a)u は a のコピー。等値は定義されている必要はない。要デストラクタ。
X u = a同上。
*a = t結果はなし。a の指す位置に t が代入される。
++r結果は const X&。末尾直後以外の場合、値は参照外し可能か末尾直後となる。
r++結果は const X&。{X x = r; ++r; return x;} と同等であること。
*++r結果は T。
*r++結果は T。

前方向反復子

X u結果は無保証。要デストラクタ。
X()同上。
X(a)コピーコンストラクタで、X(a)==a を満たす。要デストラクタ。
X u(a)結果として u==a となる。要デストラクタ。
X u = a同上。
a == b等値関係。*a == *b であること。結果は bool。
a != b!(a==b) と同じでなければいけない。
r = a結果は X&。r==a であること。
*a参照外し。結果は T。a が可変の場合、*a = t も有効。
++r結果は const X&。末尾直後以外の場合、値は参照外し可能か末尾直後となる。
r++結果は const X&。{X x = r; ++r; return x;} と同等であること。
*++r結果は T。
*r++結果は T。

双方向反復子

前方向反復子の要件に加えて、以下の要件が必要。
--r結果は const X&。末尾直後以外の場合、値は参照外し可能か末尾直後となる。
r--結果は const X&。{X x = r; --r; return x;} と同等であること。
*--r結果は T。
*r--結果は T。

ランダムアクセス反復子

双方向反復子の要件に加えて、以下の要件が必要。
r += n結果は正に X&。以下と同じ値を一定時間で求めること。
{ Distance m = n;
  if (m >= 0) while (m--) ++r;
  else        while (m++) --r;
  return r; }
a+n結果は正に X。{X x = a; return a += n;} と同等であること。
n+a同上。
r -= n結果は正に X&。r += -n と同等であること。
a-n結果は正に X。{X x = a; return a -= n;} と同等であること。
b-a結果は正に Distance。a+n==b のとき、結果の値は n であること。
a[n]結果は T。値は *(a+n)。
a < b結果は bool。< は全順序であること。
a > b結果は bool。b < a と同等であること。
a >= b結果は bool。!(a < b) と同等であること。
a <= b結果は bool。!(b < a) と同等であること。

戻る