range の定義
この条件を満たしていれば、基本的に使用できる。
- 下記のメンバを持つクラス
- 配列型(T[N])である
- iterator の値を保持している std::pair 型である
例)
int array[] = {0, 1, 2, 3, 4, 5}; // 配列型なので、OK int* p = array; // ポインタ型なので、NG std::vector<int> vec; // 必要なメンバを持っているので、OK std::pair< std::vector<int>::iterator, std::vector<int>::iterator > pair = std::make_pair(vec.begin(), vec.end()); // iterator 型を保持してるので、OK struct my_array_{ int array[5]; } my_array; // メンバがないので、NG struct my_array_ex_{ int array[5]; typedef int* iterator; typedef const int* const_iterator; iterator begin(){ return &array[0]; }; iterator end(){ return &array[5]; }; const_iterator begin() const{ return &array[0]; }; const_iterator end() const{ return &array[5]; }; } my_array_ex; // 必要なメンバを持っているので、OK