Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Шаблон класса — это адаптер итератора, описывающий объект обратного итератора, который ведет себя как случайный доступ или двунаправленный итератор, только в обратном направлении. Он включает прохождение через диапазон в обратном порядке.
Синтаксис
template <class RandomIterator>
class reverse_iterator
Параметры
RandomIterator Тип, представляющий итератор для адаптации для работы в обратном направлении.
Замечания
Существующие контейнеры стандартной библиотеки C++ также задают типы reverse_iterator и const_reverse_iterator и обладают функциями-членами rbegin и rend, которые возвращают обратные итераторы. Эти итераторы обладают семантикой перезаписи. Адаптер reverse_iterator дополняет эту функцию, так как она предлагает семантику вставки, а также может использоваться с потоками.
Для reverse_iterator этого требуется двунаправленный итератор, не должен вызывать какие-либо функции-члены operator+=, operator-operator+operator-=, или operator[], которые могут использоваться только с итераторами случайного доступа.
Диапазон итератора — [первый, последний), где квадратная скобка слева указывает на включение первого и скобки справа указывает на включение элементов вплоть до последнего. Те же элементы включаются в обратную последовательность [rev - first, rev - last) таким образом, чтобы, если последний является одним из последних элементов в последовательности, то первый элемент редуется - в обратной последовательности точек на *(last - 1). Идентификатор, который связывает все обратные итераторы с их базовыми итераторами:
&*(reverse_iterator (i)) == &*(i - 1).
На практике это означает, что в обращенной последовательности reverse_iterator будет ссылаться на элемент, позиция которого на единицу превышает позицию элемента, на который итератор ссылается в исходной последовательности (т. е. находится справа от данного элемента). Поэтому если итератор обращался к элементу 6 в последовательности (2, 4, 6, 8), то итератор reverse_iterator будет обращаться к элементу 4 в обращенной последовательности (8, 6, 4, 2).
Конструкторы
| Конструктор | Description |
|---|---|
| reverse_iterator | Формирование итератора reverse_iterator по умолчанию или итератора reverse_iterator из базового итератора. |
Определения типов
| Введите имя | Description |
|---|---|
| difference_type | Тип, обеспечивающий разницу между двумя итераторами reverse_iterator, которые ссылаются на элементы в одном контейнере. |
| iterator_type | Тип, предоставляющий базовый итератор для итератора reverse_iterator. |
| pointer | Тип, содержащий указатель на элемент, к которому обращается итератор reverse_iterator. |
| reference | Тип, содержащий ссылку на элемент, к которому обращается итератор reverse_iterator. |
Функции элементов
| Функция-член | Description |
|---|---|
| base | Восстановление базового итератора из соответствующего итератора reverse_iterator. |
Операторы
| Operator | Description |
|---|---|
| operator_star | Возвращение элемента, к которому обращается reverse_iterator. |
| operator+ | Добавление смещения к итератору и возврат нового итератора reverse_iterator, который обращается к вставленному элементу в новой позиции смещения. |
| оператор++ | Увеличение reverse_iterator до следующего элемента. |
| оператор+= | Добавление заданного смещения из итератора reverse_iterator. |
| operator- | Вычитание смещения из итератора reverse_iterator с возвратом итератора reverse_iterator, который обращается к элементу в позиции со сдвигом. |
| оператор-- | Уменьшение reverse_iterator до предыдущего элемента. |
| operator-= | Вычитание заданного смещения из итератора reverse_iterator. |
| operator-> | Возвращение указателя на элемент, к которому обращается reverse_iterator. |
operator[] |
Возврат ссылки на смещение элемента из элемента, к которому обращается reverse_iterator, на указанное число позиций. |
Требования
Заголовок:<итератор>
Пространство имен: std
reverse_iterator::base
Восстановление базового итератора из соответствующего итератора reverse_iterator.
RandomIterator base() const;
Возвращаемое значение
Базовый интегратор reverse_iterator.
Замечания
Идентификатор, который связывает все обратные итераторы с их базовыми итераторами:
&*(reverse_iterator (i)) == &*(i - 1).
На практике это означает, что в обращенной последовательности reverse_iterator будет ссылаться на элемент, позиция которого на единицу превышает позицию элемента, на который итератор ссылается в исходной последовательности (т. е. находится справа от данного элемента). Поэтому если итератор обращался к элементу 6 в последовательности (2, 4, 6, 8), то итератор reverse_iterator будет обращаться к элементу 4 в обращенной последовательности (8, 6, 4, 2).
Пример
// 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
Тип, обеспечивающий разницу между двумя итераторами reverse_iterator, которые ссылаются на элементы в одном контейнере.
typedef typename iterator_traits<RandomIterator>::difference_type difference_type;
Замечания
Тип отличия reverse_iterator совпадает с типом отличия итератора.
Этот тип является синонимом имени типа для признака итератора iterator_traits<RandomIterator>::pointer.
Пример
Пример reverse_iterator::operator[] объявления и использования difference_type.
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.
Замечания
Оператор возвращает *( текущий — 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, а второй, постинкрементный оператор, возвращает копию увеличенного 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, а второй, постдекрементный оператор, возвращает копию уменьшенного 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 удовлетворяет требованиям для итератора произвольного доступа.
Оператор оценивает текущий + выкл. Затем возвращается.*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;
Замечания
Тип является синонимом имени типа итератора iterator_traits<RandomIterator>::reference.
Пример
Примеры объявления и использования смreverse_iterator::operator[]. в разделе или reverse_iterator::operator* .reference
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 будет ссылаться на элемент, позиция которого на единицу превышает позицию элемента, на который итератор ссылается в исходной последовательности (т. е. находится справа от данного элемента). Поэтому если итератор обращался к элементу 6 в последовательности (2, 4, 6, 8), то итератор reverse_iterator будет обращаться к элементу 4 в обращенной последовательности (8, 6, 4, 2).
Пример
// 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;
}
См. также
<iterator>
Потокобезопасность в стандартной библиотеке C++
Справочник по стандартной библиотеке C++