std::iter_move(std::reverse_iterator)
From cppreference.com
< cpp | iterator | reverse iterator
| friend constexpr std::iter_rvalue_reference_t<Iter> iter_move( const std::reverse_iterator& i ) noexcept(/* 以下参照 */); |
(C++20以降) | |
調整された基となるイテレータの逆参照の結果を、関連付けられたrvalue参照型にキャストします。
同等:auto tmp = i.base();
return std::ranges::iter_move(--tmp);
この関数テンプレートは、通常の非修飾または修飾ルックアップでは表示されず、std::reverse_iterator<Iter> が引数に関連付けられたクラスである場合にのみ、引数依存探索によって検出されます。
目次 |
[編集] パラメータ
| i | - | ソースの逆イテレータ |
[編集] 戻り値
右辺値参照またはprvalueの一時オブジェクト。
[編集] 計算量
定数。
[編集] 例外
noexcept 指定:
noexcept(
std::is_nothrow_copy_constructible_v<Iter> &&
noexcept(std::ranges::iter_move(--std::declval<Iter&>()))
[編集] 例
このコードを実行
#include <iomanip> #include <iostream> #include <iterator> #include <string> #include <vector> void print(const auto& rem, const auto& v) { std::cout << rem << '[' << size(v) << "] {"; for (char comma[]{0, 0}; const auto& s : v) std::cout << comma << ' ' << std::quoted(s), comma[0] = ','; std::cout << " }\n"; } int main() { std::vector<std::string> p{"Alpha", "Bravo", "Charlie"}, q; print("p", p), print("q", q); using RI = std::reverse_iterator<std::vector<std::string>::iterator>; for (RI iter{p.rbegin()}, rend{p.rend()}; iter != rend; ++iter) q.emplace_back(/* ADL */ iter_move(iter)); print("p", p), print("q", q); }
実行結果の例
p[3] { "Alpha", "Bravo", "Charlie" }
q[0] { }
p[3] { "", "", "" }
q[3] { "Charlie", "Bravo", "Alpha" }[編集] 関連項目
| (C++20) |
オブジェクトの間接参照の結果を、その関連する右辺値参照型にキャストする (カスタマイゼーションポイントオブジェクト) |
| (C++20) |
基底イテレータの間接参照の結果を関連する右辺値参照型にキャストする (関数) |
| (C++11) |
引数をxvalueに変換する (関数テンプレート) |
| (C++11) |
ムーブコンストラクタが例外を投げない場合に引数をxvalueに変換する (関数テンプレート) |
| (C++11) |
関数引数を転送し、型テンプレート引数を使用してその値カテゴリを維持する (関数テンプレート) |
| (C++20) |
要素の範囲を新しい場所にムーブする (アルゴリズム関数オブジェクト) |
| (C++20) |
要素の範囲を逆順で新しい場所にムーブする (アルゴリズム関数オブジェクト) |