std::iter_swap(std::reverse_iterator)
From cppreference.com
< cpp | iterator | reverse iterator
| template< std::indirectly_swappable<Iter> Iter2 > friend constexpr void iter_swap( const reverse_iterator& x, |
(C++20以降) | |
2つの調整された基底イテレータが指すオブジェクトを交換します。
次と同等です:auto tmp_x = x.base();
auto tmp_y = y.base();
ranges::iter_swap(--tmp_x, --tmp_y);。
この関数テンプレートは、通常の非修飾または修飾ルックアップでは見えず、引数が関連クラスである場合にのみ引数依存名探索によって見つけることができます。std::reverse_iterator<Iter>
目次 |
[編集] パラメータ
| x, y | - | 交換する要素へのreverseイテレータ |
[編集] 計算量
定数。
[編集] 例外
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
[編集] 関連項目
| 2つのオブジェクトの値を交換する (関数テンプレート) | |
| 2つの要素の範囲を交換する (関数テンプレート) | |
| 2つのイテレータが指す要素をスワップする (関数テンプレート) | |
| (C++20) |
2つの間接参照可能なオブジェクトが参照する値を交換する (カスタマイゼーションポイントオブジェクト) |
| (C++20) |
2つの基底イテレータが指すオブジェクトをスワップする (関数テンプレート) |