Difference between revisions of "cpp/iterator/reverse iterator/iter swap"
From cppreference.com
< cpp | iterator | reverse iterator
m (→Example: expose iterators' type) |
m (~) |
||
Line 1: | Line 1: | ||
− | {{title | | + | {{title | iter_swap<small>(std::reverse_iterator)</small>}} |
{{cpp/iterator/reverse_iterator/navbar}} | {{cpp/iterator/reverse_iterator/navbar}} | ||
{{dcl begin}} | {{dcl begin}} | ||
Line 5: | Line 5: | ||
template< std::indirectly_swappable<Iter> Iter2 > | template< std::indirectly_swappable<Iter> Iter2 > | ||
friend constexpr void | friend constexpr void | ||
− | + | iter_swap( const reverse_iterator& x, | |
− | + | const std::reverse_iterator<Iter2>& y ) noexcept(/*see below*/); | |
}} | }} | ||
{{dcl end}} | {{dcl end}} | ||
− | Swaps the objects pointed to by two adjusted underlying iterators. | + | Swaps the objects pointed to by two adjusted underlying iterators. function is equivalent to: |
{{source|1= | {{source|1= | ||
Line 17: | Line 17: | ||
ranges::iter_swap(--tmp_x, --tmp_y); | ranges::iter_swap(--tmp_x, --tmp_y); | ||
}} | }} | ||
+ | |||
+ | |||
===Parameters=== | ===Parameters=== | ||
Line 27: | Line 29: | ||
===Complexity=== | ===Complexity=== | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | {{ | + | |
− | std::is_nothrow_copy_constructible_v<Iter> && | + | {{| |
− | std::is_nothrow_copy_constructible_v<Iter2> && | + | std::is_nothrow_copy_constructible_v<Iter> && |
− | noexcept(ranges::iter_swap(--std::declval<Iter&>(), --std::declval<Iter2&>())) | + | std::is_nothrow_copy_constructible_v<Iter2> && |
+ | noexcept(ranges::iter_swap(--std::declval<Iter&>(), --std::declval<Iter2&>())) | ||
}} | }} | ||
Revision as of 04:32, 29 April 2021
template< std::indirectly_swappable<Iter> Iter2 > friend constexpr void |
(since C++20) | |
Swaps the objects pointed to by two adjusted underlying iterators. The function body is equivalent to:
auto tmp_x = x.base(); auto tmp_y = y.base(); ranges::iter_swap(--tmp_x, --tmp_y);
This function template is not visible to ordinary unqualified or qualified lookup, and can only be found by argument-dependent lookup when std::reverse_iterator<Iter> is an associated class of the arguments.
Contents |
Parameters
x, y | - | reverse iterators to the elements to swap |
Return value
(none)
Complexity
Constant
Exceptions
noexcept specification:
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&>()))
Example
Run this code
#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() };