Поделиться через


Класс 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 Синоним ссылки rvaluevalue_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

Тип referencetypedef на основе 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++