reverse_iterator クラス
このクラス テンプレートは、逆方向でのみランダム アクセス反復子または双方向反復子のように動作する反転反復子オブジェクトを表す反復子アダプターです。 これは範囲の後方走査を有効にします。
構文
template <class RandomIterator>
class reverse_iterator
パラメーター
RandomIterator 逆方向に動作するように適合させる反復子を表す型。
解説
既存の C++ 標準ライブラリのコンテナーは、reverse_iterator
型および const_reverse_iterator
型も定義し、反転反復子を返すメンバー関数 rbegin
および rend
を備えています。 これらの反復子には、上書きセマンティクスがあります。 reverse_iterator
アダプターは、この機能を補完して挿入セマンティクスを提供し、ストリームで使用できるようにします。
双方向反復子を必要とする reverse_iterator
で、ランダム アクセス反復子でのみ使用できるメンバー関数 operator+=
、operator+
、operator-=
、operator-
、または operator[]
を呼び出すことはできません。
反復子の範囲は [first, last) です。左側の角かっこは first の包含を示し 右側のかっこは要素の包含を示しますが、 last を除きます。 同じ要素が反転シーケンス [ rev - first, rev - last) に含まれます。last がシーケンス内で末尾の 1 つ次の要素である場合、反転シーケンス内の最初の要素 rev - first は *(last - 1) を指します。 すべての反転反復子を基になる反復子に関連付ける識別子は、次のとおりです。
&*(reverse_iterator (i)) == &i - 1)。
実際には、反転シーケンスで reverse_iterator は、元のシーケンスで反復子が参照する要素の 1 つ次の (右側にある) 要素を参照することを意味します。 したがって、反復子がシーケンス (2、4、6、8) で要素 6 を指定する場合、reverse_iterator
は反転シーケンス (8、6、4、2) の 4 要素を指定します。
コンストラクター
コンストラクター | 説明 |
---|---|
reverse_iterator | 基になる反復子の既定の reverse_iterator または reverse_iterator を構築します。 |
Typedefs
型名 | 説明 |
---|---|
difference_type | 同じコンテナー内の要素を参照する 2 つの reverse_iterator の違いを提供する型。 |
iterator_type | reverse_iterator に基になる反復子を提供する型。 |
pointer | reverse_iterator によってアドレス指定される要素へのポインターを提供する型。 |
参照先 | reverse_iterator によってアドレス指定される要素への参照を提供する型。 |
メンバー関数
メンバー関数 | 説明 |
---|---|
base | その reverse_iterator から基になる反復子を復元します。 |
演算子
演算子 | 説明 |
---|---|
operator_star | reverse_iterator がアドレス指定する要素を返します。 |
operator+ | 反復子にオフセットを追加し、新しいオフセット位置に挿入された要素をアドレス指定する新しい reverse_iterator アドレスを返します。 |
operator++ | reverse_iterator を次の要素にインクリメントします。 |
operator+= | 指定したオフセットを reverse_iterator から追加します。 |
operator- | reverse_iterator からオフセットを減算し、オフセット位置にある要素を指定する reverse_iterator を返します。 |
operator-- | reverse_iterator を直前の要素にデクリメントします。 |
operator-= | 指定されたオフセットを reverse_iterator から減算します。 |
operator-> | reverse_iterator によってアドレス指定される要素へのポインターを返します。 |
operator[] |
reverse_iterator によってアドレス指定される要素からの要素のオフセットへの参照を返します。 |
要件
ヘッダー: <iterator>
名前空間: std
reverse_iterator::base
その reverse_iterator
から基になる反復子を復元します。
RandomIterator base() const;
戻り値
reverse_iterator
の基になる反復子。
解説
すべての反転反復子を基になる反復子に関連付ける識別子は、次のとおりです。
&*(reverse_iterator
(i)) == &i - 1)。
実際には、反転シーケンスで reverse_iterator
は、元のシーケンスで反復子が参照する要素の 1 つ次の (右側にある) 要素を参照することを意味します。 したがって、反復子がシーケンス (2、4、6、8) で要素 6 を指定する場合、reverse_iterator
は反転シーケンス (8、6、4、2) の 4 要素を指定します。
例
// reverse_iterator_base.cpp
// compile with: /EHsc
#include <iterator>
#include <algorithm>
#include <vector>
#include <iostream>
int main( )
{
using namespace std;
int i;
vector<int> vec;
for ( i = 1 ; i < 6 ; ++i )
{
vec.push_back ( 2 * i );
}
vector <int>::iterator vIter;
cout << "The vector vec is: ( ";
for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++ )
cout << *vIter << " ";
cout << ")." << endl;
vector <int>::reverse_iterator rvIter;
cout << "The vector vec reversed is: ( ";
for ( rvIter = vec.rbegin( ) ; rvIter != vec.rend( ); rvIter++)
cout << *rvIter << " ";
cout << ")." << endl;
vector <int>::iterator pos, bpos;
pos = find ( vec.begin ( ), vec.end ( ), 6 );
cout << "The iterator pos points to: " << *pos << "." << endl;
typedef reverse_iterator<vector<int>::iterator>::iterator_type it_vec_int_type;
reverse_iterator<it_vec_int_type> rpos ( pos );
cout << "The reverse_iterator rpos points to: " << *rpos
<< "." << endl;
bpos = rpos.base ( );
cout << "The iterator underlying rpos is bpos & it points to: "
<< *bpos << "." << endl;
}
reverse_iterator::d ifference_type
同じコンテナー内の要素を参照する 2 つの reverse_iterator
の違いを提供する型。
typedef typename iterator_traits<RandomIterator>::difference_type difference_type;
解説
reverse_iterator
の異なる型は、反復子の異なる型と同じです。
この型は、反復子の特徴型名 iterator_traits
<RandomIterator>::pointer のシノニムです。
例
difference_type
の宣言と使用方法の例については、「reverse_iterator::operator[]
」を参照してください。
reverse_iterator::iterator_type
reverse_iterator
に基になる反復子を提供する型。
typedef RandomIterator iterator_type;
解説
この型は、テンプレート パラメーター Iterator
のシノニムです。
例
iterator_type
を宣言して使用する方法の例については、reverse_iterator::base を参照してください。
reverse_iterator::operator*
reverse_iterator が指す要素を返します。
reference operator*() const;
戻り値
reverse_iterator により指される要素の値。
解説
この演算子は、*( current - 1) を返します。
例
// reverse_iterator_op_ref.cpp
// compile with: /EHsc
#include <iterator>
#include <algorithm>
#include <vector>
#include <iostream>
int main( )
{
using namespace std;
int i;
vector<int> vec;
for (i = 1 ; i < 6 ; ++i )
{
vec.push_back ( 2 * i );
}
vector <int>::iterator vIter;
cout << "The vector vec is: ( ";
for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++ )
cout << *vIter << " ";
cout << ")." << endl;
vector <int>::reverse_iterator rvIter;
cout << "The vector vec reversed is: ( ";
for ( rvIter = vec.rbegin( ) ; rvIter != vec.rend( ); rvIter++)
cout << *rvIter << " ";
cout << ")." << endl;
vector <int>::iterator pos, bpos;
pos = find ( vec.begin ( ), vec.end ( ), 6 );
// Declare a difference type for a parameter
// declare a reference return type
reverse_iterator<vector<int>::iterator>::reference refpos = *pos;
cout << "The iterator pos points to: " << refpos << "." << endl;
}
reverse_iterator::operator+
反復子にオフセットを追加し、新しいオフセット位置に挿入された要素をアドレス指定する新しい reverse_iterator
アドレスを返します。
reverse_iterator<RandomIterator> operator+(difference_type Off) const;
パラメーター
"オフ"
逆順反復子に追加するオフセット。
戻り値
オフセット要素を指す reverse_iterator
。
解説
このメンバー関数を使用できるのは、reverse_iterator
がランダムアクセス反復子の要件を満たす場合のみです。
例
// reverse_iterator_op_add.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>
int main( )
{
using namespace std;
int i;
vector<int> vec;
for (i = 1 ; i < 6 ; ++i )
{
vec.push_back ( 2 * i );
}
vector <int>::iterator vIter;
cout << "The vector vec is: ( ";
for ( vIter = vec.begin( ) ; vIter != vec.end( ); vIter++)
cout << *vIter << " ";
cout << ")." << endl;
vector <int>::reverse_iterator rvIter;
cout << "The vector vec reversed is: ( ";
for ( rvIter = vec.rbegin( ) ; rvIter != vec.rend( ); rvIter++)
cout << *rvIter << " ";
cout << ")." << endl;
// Initializing reverse_iterators to the first element
vector <int>::reverse_iterator rVPOS1 = vec.rbegin ( );
cout << "The iterator rVPOS1 initially points to the first "
<< "element\n in the reversed sequence: "
<< *rVPOS1 << "." << endl;
vector <int>::reverse_iterator rVPOS2 =rVPOS1 + 2; // offset added
cout << "After the +2 offset, the iterator rVPOS2 points\n"
<< " to the 3rd element in the reversed sequence: "
<< *rVPOS2 << "." << endl;
}
The vector vec is: ( 2 4 6 8 10 ).
The vector vec reversed is: ( 10 8 6 4 2 ).
The iterator rVPOS1 initially points to the first element
in the reversed sequence: 10.
After the +2 offset, the iterator rVPOS2 points
to the 3rd element in the reversed sequence: 6.
reverse_iterator::operator++
reverse_iterator を直前の要素にインクリメントします。
reverse_iterator<RandomIterator>& operator++();
reverse_iterator<RandomIterator> operator++(int);
戻り値
最初の演算子は、プリインクリメントされた reverse_iterator
を返し、2 番目のポストインクリメント演算子は、インクリメントされた reverse_iterator
のコピーを返します。
解説
このメンバー関数を使用できるのは、reverse_iterator
が双方向反復子の要件を満たす場合のみです。
例
// reverse_iterator_op_incr.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>
int main( )
{
using namespace std;
int i;
vector<int> vec;
for ( i = 1 ; i < 6 ; ++i )
{
vec.push_back ( 2 * i - 1 );
}
vector <int>::iterator vIter;
cout << "The vector vec is: ( ";
for ( vIter = vec.begin( ) ; vIter != vec.end( ); vIter++)
cout << *vIter << " ";
cout << ")." << endl;
vector <int>::reverse_iterator rvIter;
cout << "The vector vec reversed is: ( ";
for ( rvIter = vec.rbegin( ) ; rvIter != vec.rend( ); rvIter++)
cout << *rvIter << " ";
cout << ")." << endl;
// Initializing reverse_iterators to the last element
vector <int>::reverse_iterator rVPOS1 = vec.rbegin( );
cout << "The iterator rVPOS1 initially points to the first "
<< "element\n in the reversed sequence: "
<< *rVPOS1 << "." << endl;
rVPOS1++; // postincrement, preincrement: ++rVPSO1
cout << "After incrementing, the iterator rVPOS1 points\n"
<< " to the second element in the reversed sequence: "
<< *rVPOS1 << "." << endl;
}
The vector vec is: ( 1 3 5 7 9 ).
The vector vec reversed is: ( 9 7 5 3 1 ).
The iterator rVPOS1 initially points to the first element
in the reversed sequence: 9.
After incrementing, the iterator rVPOS1 points
to the second element in the reversed sequence: 7.
reverse_iterator::operator+=
指定したオフセットを reverse_iterator から追加します。
reverse_iterator<RandomIterator>& operator+=(difference_type Off);
パラメーター
"オフ"
反復子をインクリメントするオフセット。
戻り値
reverse_iterator
によってアドレス指定される要素への参照を返します。
例
// reverse_iterator_op_addoff.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>
int main( )
{
using namespace std;
int i;
vector<int> vec;
for (i = 1 ; i < 6 ; ++i )
{
vec.push_back ( 2 * i );
}
vector <int>::iterator vIter;
cout << "The vector vec is: ( ";
for ( vIter = vec.begin( ) ; vIter != vec.end( ); vIter++)
cout << *vIter << " ";
cout << ")." << endl;
vector <int>::reverse_iterator rvIter;
cout << "The vector vec reversed is: ( ";
for ( rvIter = vec.rbegin( ) ; rvIter != vec.rend( ); rvIter++)
cout << *rvIter << " ";
cout << ")." << endl;
// Initializing reverse_iterators to the last element
vector <int>::reverse_iterator rVPOS1 = vec.rbegin ( );
cout << "The iterator rVPOS1 initially points to the first "
<< "element\n in the reversed sequence: "
<< *rVPOS1 << "." << endl;
rVPOS1+=2; // addition of an offset
cout << "After the +2 offset, the iterator rVPOS1 now points\n"
<< " to the third element in the reversed sequence: "
<< *rVPOS1 << "." << endl;
}
The vector vec is: ( 2 4 6 8 10 ).
The vector vec reversed is: ( 10 8 6 4 2 ).
The iterator rVPOS1 initially points to the first element
in the reversed sequence: 10.
After the +2 offset, the iterator rVPOS1 now points
to the third element in the reversed sequence: 6.
reverse_iterator::operator-
reverse_iterator
からオフセットを減算し、オフセット位置にある要素を指定する reverse_iterator
を返します。
reverse_iterator<RandomIterator> operator-(difference_type Off) const;
パラメーター
"オフ"
reverse_iterator から減算するオフセット。
戻り値
オフセット要素を指す reverse_iterator
。
解説
このメンバー関数を使用できるのは、reverse_iterator
がランダムアクセス反復子の要件を満たす場合のみです。
例
// reverse_iterator_op_sub.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>
int main( )
{
using namespace std;
int i;
vector<int> vec;
for ( i = 1 ; i < 6 ; ++i )
{
vec.push_back ( 3 * i );
}
vector <int>::iterator vIter;
cout << "The vector vec is: ( ";
for ( vIter = vec.begin( ) ; vIter != vec.end( ); vIter++)
cout << *vIter << " ";
cout << ")." << endl;
vector <int>::reverse_iterator rvIter;
cout << "The vector vec reversed is: ( ";
for ( rvIter = vec.rbegin( ) ; rvIter != vec.rend( ); rvIter++)
cout << *rvIter << " ";
cout << ")." << endl;
// Initializing reverse_iterators to the first element
vector <int>::reverse_iterator rVPOS1 = vec.rend ( ) - 1;
cout << "The iterator rVPOS1 initially points to the last "
<< "element\n in the reversed sequence: "
<< *rVPOS1 << "." << endl;
vector <int>::reverse_iterator rVPOS2 =rVPOS1 - 2; // offset subtracted
cout << "After the -2 offset, the iterator rVPOS2 points\n"
<< " to the 2nd element from the last in the reversed sequence: "
<< *rVPOS2 << "." << endl;
}
The vector vec is: ( 3 6 9 12 15 ).
The vector vec reversed is: ( 15 12 9 6 3 ).
The iterator rVPOS1 initially points to the last element
in the reversed sequence: 3.
After the -2 offset, the iterator rVPOS2 points
to the 2nd element from the last in the reversed sequence: 9.
reverse_iterator::operator--
reverse_iterator を直前の要素にデクリメントします。
reverse_iterator<RandomIterator>& operator--();
reverse_iterator<RandomIterator> operator--(int);
戻り値
最初の演算子はプリデクリメントされた reverse_iterator
を返し、2 番目のポストデクリメント演算子は、デクリメントされた reverse_iterator
のコピーを返します。
解説
このメンバー関数を使用できるのは、reverse_iterator
が双方向反復子の要件を満たす場合のみです。
例
// reverse_iterator_op_decr.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>
int main( )
{
using namespace std;
int i;
vector<int> vec;
for (i = 1 ; i < 6 ; ++i )
{
vec.push_back ( 2 * i - 1 );
}
vector <int>::iterator vIter;
cout << "The vector vec is: ( ";
for ( vIter = vec.begin( ) ; vIter != vec.end( ); vIter++)
cout << *vIter << " ";
cout << ")." << endl;
vector <int>::reverse_iterator rvIter;
cout << "The vector vec reversed is: ( ";
for ( rvIter = vec.rbegin( ) ; rvIter != vec.rend( ); rvIter++)
cout << *rvIter << " ";
cout << ")." << endl;
// Initializing reverse_iterators to the first element
vector <int>::reverse_iterator rVPOS1 = vec.rend ( ) - 1;
cout << "The iterator rVPOS1 initially points to the last "
<< "element\n in the reversed sequence: "
<< *rVPOS1 << "." << endl;
rVPOS1--; // postdecrement, predecrement: --rVPSO1
cout << "After the decrement, the iterator rVPOS1 points\n"
<< " to the next-to-last element in the reversed sequence: "
<< *rVPOS1 << "." << endl;
}
The vector vec is: ( 1 3 5 7 9 ).
The vector vec reversed is: ( 9 7 5 3 1 ).
The iterator rVPOS1 initially points to the last element
in the reversed sequence: 1.
After the decrement, the iterator rVPOS1 points
to the next-to-last element in the reversed sequence: 3.
reverse_iterator::operator-=
指定されたオフセットを reverse_iterator
から減算します。
reverse_iterator<RandomIterator>& operator-=(difference_type Off);
パラメーター
"オフ"
reverse_iterator
から減算されるオフセット。
解説
このメンバー関数を使用できるのは、reverse_iterator
がランダムアクセス反復子の要件を満たす場合のみです。
演算子は、 current + Off を評価し、 *this
を返します。
例
// reverse_iterator_op_suboff.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>
int main( )
{
using namespace std;
int i;
vector<int> vec;
for (i = 1 ; i < 6 ; ++i )
{
vec.push_back ( 3 * i );
}
vector <int>::iterator vIter;
cout << "The vector vec is: ( ";
for ( vIter = vec.begin( ) ; vIter != vec.end( ); vIter++)
cout << *vIter << " ";
cout << ")." << endl;
vector <int>::reverse_iterator rvIter;
cout << "The vector vec reversed is: ( ";
for ( rvIter = vec.rbegin( ) ; rvIter != vec.rend( ); rvIter++)
cout << *rvIter << " ";
cout << ")." << endl;
// Initializing reverse_iterators to the first element
vector <int>::reverse_iterator rVPOS1 = vec.rend ( ) - 1;
cout << "The iterator rVPOS1 initially points to the last "
<< "element\n in the reversed sequence: "
<< *rVPOS1 << "." << endl;
rVPOS1-=2; // Subtraction of an offset
cout << "After the -2 offset, the iterator rVPOS1 now points\n"
<< " to the 2nd element from the last in the reversed sequence: "
<< *rVPOS1 << "." << endl;
}
The vector vec is: ( 3 6 9 12 15 ).
The vector vec reversed is: ( 15 12 9 6 3 ).
The iterator rVPOS1 initially points to the last element
in the reversed sequence: 3.
After the -2 offset, the iterator rVPOS1 now points
to the 2nd element from the last in the reversed sequence: 9.
reverse_iterator::operator->
reverse_iterator
によってアドレス指定される要素へのポインターを返します。
pointer operator->() const;
戻り値
reverse_iterator
によってアドレス指定される要素へのポインター。
解説
この演算子は &**this
を返します。
例
// reverse_iterator_ptrto.cpp
// compile with: /EHsc
#include <iterator>
#include <algorithm>
#include <vector>
#include <utility>
#include <iostream>
int main( )
{
using namespace std;
typedef vector<pair<int,int> > pVector;
pVector vec;
vec.push_back(pVector::value_type(1,2));
vec.push_back(pVector::value_type(3,4));
vec.push_back(pVector::value_type(5,6));
pVector::iterator pvIter;
cout << "The vector vec of integer pairs is:\n( ";
for ( pvIter = vec.begin ( ) ; pvIter != vec.end ( ); pvIter++)
cout << "( " << pvIter -> first << ", " << pvIter -> second << ") ";
cout << ")" << endl << endl;
pVector::reverse_iterator rpvIter;
cout << "The vector vec reversed is:\n( ";
for ( rpvIter = vec.rbegin( ) ; rpvIter != vec.rend( ); rpvIter++ )
cout << "( " << rpvIter -> first << ", " << rpvIter -> second << ") ";
cout << ")" << endl << endl;
pVector::iterator pos = vec.begin ( );
pos++;
cout << "The iterator pos points to:\n( " << pos -> first << ", "
<< pos -> second << " )" << endl << endl;
pVector::reverse_iterator rpos (pos);
// Use operator -> with return type: why type int and not int*
int fint = rpos -> first;
int sint = rpos -> second;
cout << "The reverse_iterator rpos points to:\n( " << fint << ", "
<< sint << " )" << endl;
}
The vector vec of integer pairs is:
( ( 1, 2) ( 3, 4) ( 5, 6) )
The vector vec reversed is:
( ( 5, 6) ( 3, 4) ( 1, 2) )
The iterator pos points to:
( 3, 4 )
The reverse_iterator rpos points to:
( 1, 2 )
reverse_iterator::operator[]
reverse_iterator
によってアドレス指定される要素からの要素のオフセットへの参照を返します。
reference operator[](difference_type Off) const;
パラメーター
"オフ"
reverse_iterator
アドレスからのオフセット。
戻り値
オフセット要素への参照。
解説
演算子は *( *this
+ Off
) を返します。
例
// reverse_iterator_ret_ref.cpp
// compile with: /EHsc
#include <iterator>
#include <algorithm>
#include <vector>
#include <iostream>
int main( )
{
using namespace std;
int i;
vector<int> vec;
for (i = 1 ; i < 6 ; ++i )
{
vec.push_back ( 2 * i );
}
vector <int>::iterator vIter;
cout << "The vector vec is: ( ";
for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++ )
cout << *vIter << " ";
cout << ")." << endl;
vector <int>::reverse_iterator rvIter;
cout << "The vector vec reversed is: ( ";
for ( rvIter = vec.rbegin( ) ; rvIter != vec.rend( ); rvIter++)
cout << *rvIter << " ";
cout << ")." << endl;
vector <int>::iterator pos;
pos = find ( vec.begin ( ), vec.end ( ), 8 );
reverse_iterator<vector<int>::iterator> rpos ( pos );
// Declare a difference type for a parameter
reverse_iterator<vector<int>::iterator>::difference_type diff = 2;
cout << "The iterator pos points to: " << *pos << "." << endl;
cout << "The iterator rpos points to: " << *rpos << "." << endl;
// Declare a reference return type & use operator[]
reverse_iterator<vector<int>::iterator>::reference refrpos = rpos [diff];
cout << "The iterator rpos now points to: " << refrpos << "." << endl;
}
The vector vec is: ( 2 4 6 8 10 ).
The vector vec reversed is: ( 10 8 6 4 2 ).
The iterator pos points to: 8.
The iterator rpos points to: 6.
The iterator rpos now points to: 2.
reverse_iterator::p ointer
reverse_iterator
によってアドレス指定される要素へのポインターを提供する型。
typedef typename iterator_traits<RandomIterator>::pointer pointer;
解説
この型は、反復子の特徴型名 iterator_traits
<RandomIterator>::pointer のシノニムです。
例
// reverse_iterator_pointer.cpp
// compile with: /EHsc
#include <iterator>
#include <algorithm>
#include <vector>
#include <utility>
#include <iostream>
int main( )
{
using namespace std;
typedef vector<pair<int,int> > pVector;
pVector vec;
vec.push_back( pVector::value_type( 1,2 ) );
vec.push_back( pVector::value_type( 3,4 ) );
vec.push_back( pVector::value_type( 5,6 ) );
pVector::iterator pvIter;
cout << "The vector vec of integer pairs is:\n" << "( ";
for ( pvIter = vec.begin ( ) ; pvIter != vec.end ( ); pvIter++)
cout << "( " << pvIter -> first << ", " << pvIter -> second << ") ";
cout << ")" << endl;
pVector::reverse_iterator rpvIter;
cout << "\nThe vector vec reversed is:\n" << "( ";
for ( rpvIter = vec.rbegin( ) ; rpvIter != vec.rend( ); rpvIter++)
cout << "( " << rpvIter -> first << ", " << rpvIter -> second << ") ";
cout << ")" << endl;
pVector::iterator pos = vec.begin ( );
pos++;
cout << "\nThe iterator pos points to:\n"
<< "( " << pos -> first << ", "
<< pos -> second << " )" << endl;
pVector::reverse_iterator rpos (pos);
cout << "\nThe iterator rpos points to:\n"
<< "( " << rpos -> first << ", "
<< rpos -> second << " )" << endl;
}
The vector vec of integer pairs is:
( ( 1, 2) ( 3, 4) ( 5, 6) )
The vector vec reversed is:
( ( 5, 6) ( 3, 4) ( 1, 2) )
The iterator pos points to:
( 3, 4 )
The iterator rpos points to:
( 1, 2 )
reverse_iterator::reference
reverse_iterator によってアドレス指定される要素への参照を提供する型。
typedef typename iterator_traits<RandomIterator>::reference reference;
解説
この型は、反復子特性の typename iterator_traits<RandomIterator>::reference
のシノニムです。
例
reference
を宣言して使用する方法の例については、「reverse_iterator::operator[]
」または「reverse_iterator::operator*」の例を参照してください。
reverse_iterator::reverse_iterator
基になる反復子の既定の reverse_iterator
または reverse_iterator
を構築します。
reverse_iterator();
explicit reverse_iterator(RandomIterator right);
template <class Type>
reverse_iterator(const reverse_iterator<Type>& right);
パラメーター
right
reverse_iterator
に適合させる反復子。
戻り値
既定の reverse_iterator
、または基になる反復子を適合させる reverse_iterator
。
解説
すべての反転反復子を基になる反復子に関連付ける識別子は、次のとおりです。
&*(reverse_iterator (i)) == &*(i-1)
.
実際には、反転シーケンスで reverse_iterator は、元のシーケンスで反復子が参照する要素の 1 つ次の (右側にある) 要素を参照することを意味します。 したがって、反復子がシーケンス (2、4、6、8) で要素 6 を指定する場合、reverse_iterator
は反転シーケンス (8、6、4、2) の 4 要素を指定します。
例
// reverse_iterator_reverse_iterator.cpp
// compile with: /EHsc
#include <iterator>
#include <algorithm>
#include <vector>
#include <iostream>
int main( )
{
using namespace std;
int i;
vector<int> vec;
for ( i = 1 ; i < 6 ; ++i )
{
vec.push_back ( i );
}
vector <int>::iterator vIter;
cout << "The vector vec is: ( ";
for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++)
cout << *vIter << " ";
cout << ")." << endl;
vector <int>::reverse_iterator rvIter;
cout << "The vector vec reversed is: ( ";
for ( rvIter = vec.rbegin( ) ; rvIter != vec.rend( ); rvIter++)
cout << *rvIter << " ";
cout << ")." << endl;
vector <int>::iterator pos;
pos = find ( vec.begin ( ), vec.end ( ), 4 );
cout << "The iterator pos = " << *pos << "." << endl;
vector <int>::reverse_iterator rpos ( pos );
cout << "The reverse_iterator rpos = " << *rpos
<< "." << endl;
}