Класс move_iterator
Шаблон класса move_iterator
является программой-оболочкой для итератора. Move_iterator обеспечивает то же поведение, что итератор, который он упаковывает (хранит), за исключением того, что оператор деиферации хранимого итератора преобразуется в ссылку rvalue, превращая копию в перемещение. Дополнительные сведения о rvalues см. в разделе Оператор объявления ссылки Rvalue: &&.
Синтаксис
class move_iterator;
Замечания
Шаблон класса описывает объект, который ведет себя как итератор, за исключением случаев разыменования. Он хранит итератор произвольного доступа типа Iterator
, доступный посредством функции-члена base()
. Все операции с итератором move_iterator
выполняются непосредственно в сохраненном итераторе, за исключением того, что результат operator*
явным образом приводится к value_type&&
для создания ссылки rvalue.
Может move_iterator
быть способен выполнять операции, которые не определены оболочкой итератора. Эти операции не следует использовать.
Конструкторы
Конструктор | Description |
---|---|
move_iterator | Конструктор для объектов типа move_iterator . |
Определения типов
Введите имя | Description |
---|---|
iterator_type | Синоним параметра шаблона RandomIterator . |
iterator_category | Синоним более длинного выражения typename с таким же именем, iterator_category определяет общие возможности данного итератора. |
value_type | Синоним более длинного выражения typename с таким же именем, value_type описывает тип элементов итератора. |
difference_type | Синоним более длинного выражения typename с таким же именем, difference_type описывает целочисленный тип, необходимый для выражения разницы между элементами. |
pointer | Синоним параметра шаблона RandomIterator . |
reference | Синоним ссылки rvalue value_type&& . |
Функции элементов
Функция-член | Description |
---|---|
base | Функция-член возвращает сохраненный итератор, инкапсулированный данным итератором move_iterator . |
Операторы
Operator | Description |
---|---|
move_iterator::operator* | Возвращает (reference)*base() . |
move_iterator::operator++ | Увеличивает значение сохраненного итератора. Точное поведение зависит от того, является ли это операция предварительного увеличения или последующего увеличения. |
move_iterator::operator-- | Уменьшает значение сохраненного итератора. Точное поведение зависит от того, является ли это предопределение или операция после добавочного увеличения. |
move_iterator::operator-> |
Возвращает &**this . |
move_iterator::operator- | Возвращает move_iterator(*this) -= путем вычитания правого значения из текущей позиции. |
move_iterator::operator[] | Возвращает (reference)*(*this + off) . Позволяет указать смещение с текущей базы для получения значения в этом местоположении. |
move_iterator::operator+ | Возвращает move_iterator(*this) += значение. Позволяет добавить смещение в текущую базу для получения значения в этом местоположении. |
move_iterator::operator+= | Добавляет правое значение к сохраненному итератору и возвращает *this . |
move_iterator::operator-= | Вычитает правое значение из сохраненного итератора и возвращает *this . |
Требования
Заголовок:<итератор>
Пространство имен: std
move_iterator::base
Возвращает сохраненный итератор для этого move_iterator
.
RandomIterator base() const;
Замечания
Эта функция-член возвращает сохраненный итератор.
move_iterator::difference_type
Тип difference_type
основан move_iterator
typedef
на признаке difference_type
итератора и может использоваться взаимозаменяемо с ним.
typedef typename iterator_traits<RandomIterator>::difference_type difference_type;
Замечания
Этот тип — синоним для признака итератора typename iterator_traits<RandomIterator>::pointer
.
move_iterator::iterator_category
Тип iterator_category
основан move_iterator
typedef
на признаке iterator_category
итератора и может использоваться взаимозаменяемо с ним.
typedef typename iterator_traits<RandomIterator>::iterator_category iterator_category;
Замечания
Этот тип — синоним для признака итератора typename iterator_traits<RandomIterator>::iterator_category
.
move_iterator::iterator_type
Тип iterator_type
основан на параметре шаблона RandomIterator
для шаблона класса move_iterator
и может использоваться вместо него.
typedef RandomIterator iterator_type;
Замечания
Этот тип является синонимом для параметра шаблона RandomIterator
.
move_iterator::move_iterator
Создает итератор перемещения. Использует параметр в качестве сохраненного итератора.
move_iterator();
explicit move_iterator(RandomIterator right);
template <class Type>
move_iterator(const move_iterator<Type>& right);
Параметры
right
Итератор, который требуется использовать в качестве сохраненного итератора.
Замечания
Первый конструктор инициализирует сохраненный итератор с помощью его конструктора по умолчанию. Остальные конструкторы инициализируют сохраненный итератор с использованием base.base()
.
move_iterator::operator+=
Добавляет смещение к сохраненному итератору, чтобы он указывал на данный элемент в новом текущем расположении. Затем оператор перемещает новый текущий элемент.
move_iterator& operator+=(difference_type _Off);
Параметры
_От
Смещение, добавляемое к текущей позиции, для определения новой текущей позиции.
Возвращаемое значение
Возвращает новый текущий элемент.
Замечания
Оператор добавляет _Off в сохраненный итератор. Затем возвращает *this
.
move_iterator::operator-=
Выполняет переход через заданное число предыдущих элементов. Этот оператор вычитает смещение из сохраненного итератора.
move_iterator& operator-=(difference_type _Off);
Параметры
Замечания
Оператор вычисляет *this += -_Off
. Затем возвращает *this
.
move_iterator::operator++
Увеличивает сохраненный итератор, принадлежащий этому move_iterator
. К текущему элементу обращается оператор postincrement. Доступ к следующему элементу осуществляется префиксным оператором.
move_iterator& operator++();
move_iterator operator++(int);
Параметры
Замечания
Первый (префиксный) оператор увеличивает сохраненный итератор. Затем возвращает *this
.
Второй (постфиксный) оператор создает копию *this
и вычисляет ++*this
. Затем возвращает эту копию.
move_iterator::operator+
Возвращает позицию итератора, увеличенную на любое число элементов.
move_iterator operator+(difference_type _Off) const;
Параметры
Замечания
Оператор возвращает move_iterator(*this) +=
_Off
.
move_iterator::operator[]
Разрешает доступ индексу массива к элементам во всем диапазоне move iterator
.
reference operator[](difference_type _Off) const;
Параметры
Замечания
Оператор возвращает (reference)*(*this + _Off)
.
move_iterator::operator--
Предекрементные и постдекрементные операторы-члены уменьшают сохраненный итератор на единицу.
move_iterator& operator--();
move_iterator operator--();
Параметры
Замечания
Первый оператор-член (предекрементный) уменьшает сохраненный итератор. Затем возвращает *this
.
Второй (постдекрементный) оператор создает копию *this
и вычисляет --*this
. Затем возвращает эту копию.
move_iterator::operator-
Уменьшает значение сохраненного итератора и возвращает указанное значение.
move_iterator operator-(difference_type _Off) const;
Параметры
Замечания
Оператор возвращает move_iterator(*this) -= _Off
.
move_iterator::operator*
Разыменовывает сохраненный итератор и возвращает значение. Оператор похож на rvalue reference
и выполняет присваивание с перемещением. Оператор передает текущий элемент из базового итератора. Следующий элемент становится текущим.
reference operator*() const;
Замечания
Оператор возвращает (reference)*base()
.
move_iterator::operator->
Как правило RandomIterator
operator->
, он предоставляет доступ к полям, принадлежащим текущему элементу.
pointer operator->() const;
Замечания
Оператор возвращает &**this
.
move_iterator::pointer
Тип pointer
— это typedef
, основанный на произвольном итераторе RandomIterator
для move_iterator
, и может использоваться с ним взаимозаменяемым образом.
typedef RandomIterator pointer;
Замечания
Тип является синонимом RandomIterator
.
move_iterator::reference
Тип reference
— typedef
на основе value_type&&
для move_iterator
, его можно использовать вместо value_type&&
.
typedef value_type&& reference;
Замечания
Этот тип является синонимом value_type&&
, который представляет собой ссылку rvalue.
move_iterator::value_type
Тип value_type
основан move_iterator
typedef
на признаке value_type
итератора и может использоваться взаимозаменяемо с ним.
typedef typename iterator_traits<RandomIterator>::value_type value_type;
Замечания
Этот тип — синоним для признака итератора typename iterator_traits<RandomIterator>::value_type
.
См. также
<iterator>
Lvalues и Rvalues
Конструкторы перемещения и операторы присваивания перемещением (C++)
Справочник по стандартной библиотеке C++