std::iter_swap(std::reverse_iterator)
template< std::indirectly_swappable<Iter> Iter2 >
friend constexpr void iter_swap( const reverse_iterator& x,
const std::reverse_iterator<Iter2>& y )
noexcept(/* see below */);
| (начиная с C++20) |
Меняет местами объекты, на которые указывают два скорректированных базовых итератора.
Эквивалентно auto tmp_x = x.base();auto tmp_y = y.base();ranges::iter_swap(--tmp_x, --tmp_y);.
Этот шаблон функции не виден при обычном неквалифицированном поиске или квалифицированном поиске и может быть найден только посредством поиска с учетом аргументов, если std::reverse_iterator<Iter> является ассоциированным классом аргументов.
Параметры
| x, y | - | обратные итераторы на элементы, которые нужно поменять местами |
Сложность
Постоянная.
Исключения
noexcept спецификация: noexcept(
std::is_nothrow_copy_constructible_v<Iter> &&
std::is_nothrow_copy_constructible_v<Iter2> &&
noexcept(ranges::iter_swap(--std::declval<Iter&>(), --std::declval<Iter2&>()))
)
Пример
#include <iostream>
#include <iterator>
#include <list>
#include <vector>
int main()
{
std::vector v{1, 2, 3};
std::list l{4, 5, 6};
std::reverse_iterator<std::vector<int>::iterator> r1{v.rbegin()};
std::reverse_iterator<std::list<int>::iterator> r2{l.rbegin()};
std::cout << *r1 << ' ' << *r2 << '\n';
iter_swap(r1, r2); // ADL
std::cout << *r1 << ' ' << *r2 << '\n';
}
Вывод:
3 6 6 3
См. также
| меняет местами значения двух объектов (шаблон функции) |
|
| меняет местами элементы двух диапазонов (шаблон функции и функциональный объект алгоритма) |
|
|
(C++20) | |
| меняет местами элементы, на которые указывают два итератора (шаблон функции) |
|
|
(C++20) | меняет местами объекты, на которые указывают два базовых итератора (шаблон функции) |
|
(C++20) | меняет местами значения, на которые ссылаются два разыменовываемых объекта (объект-точка настройки) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/iterator/reverse_iterator/iter_swap