iter_move(std::counted_iterator)
來自 cppreference.com
friend constexpr decltype(auto) iter_move( const std::counted_iterator& i ) noexcept(noexcept(ranges::iter_move(i.base()))) |
(C++20 起) | |
將底層迭代器解引用的結果轉換為其關聯的右值引用型別。
此函式體等價於 return ranges::iter_move(i.base());。
此函式對普通的非限定查詢或限定查詢不可見,僅當 std::counted_iterator<I> 是實參的關聯類時,才能透過實參依賴查詢找到它。
如果 i.count() 等於 0,則行為未定義。
目錄 |
[編輯] 引數
i | - | 源迭代器介面卡 |
[編輯] 返回值
一個右值引用或一個純右值臨時量。
[編輯] 複雜度
常數時間。
[編輯] 示例
執行此程式碼
#include <iomanip> #include <iostream> #include <iterator> #include <string> #include <vector> void print(auto const& rem, auto const& v) { std::cout << rem << '[' << size(v) << "] {"; for (char comma[]{0, ' ', 0}; auto const& s : v) std::cout << comma << std::quoted(s), *comma = ','; std::cout << "}\n"; } int main() { std::vector<std::string> p{"Alpha", "Bravo", "Charlie"}, q; print("p", p); print("q", q); using RI = std::counted_iterator<std::vector<std::string>::iterator>; for (RI iter{p.begin(), 2}; iter != std::default_sentinel; ++iter) q.emplace_back(/* ADL */ iter_move(iter)); print("p", p); print("q", q); }
可能的輸出
p[3] {"Alpha", "Bravo", "Charlie"} q[0] {} p[3] {"", "", "Charlie"} q[2] {"Alpha", "Bravo"}
[編輯] 缺陷報告
下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。
缺陷報告 | 應用於 | 釋出時的行為 | 正確的行為 |
---|---|---|---|
LWG 3953 | C++20 | 返回型別曾是 std::iter_rvalue_reference_t<I> | 更改為 decltype(auto) |
[編輯] 參閱
(C++20) |
將解引用物件的結果轉換為其關聯的右值引用型別 (定製點物件) |
(C++20) |
交換兩個底層迭代器指向的物件 (函式模板) |
(C++11) |
將引數轉換為亡值 (函式模板) |
(C++11) |
如果移動建構函式不丟擲異常,則將引數轉換為亡值 (函式模板) |
(C++11) |
轉發函式引數並使用型別模板引數來保留其值類別 (函式模板) |
(C++20) |
將一個範圍的元素移動到一個新位置 (演算法函式物件) |
(C++20) |
以逆序將一個範圍的元素移動到一個新位置 (演算法函式物件) |