std::experimental::ranges::advance
從 cppreference.com
< cpp | experimental | ranges
namespace { constexpr /* 未指明 */ advance = /* 未指明 */; |
(範圍 TS) (定製點對象) |
|
調用簽名 |
||
template< Iterator I > constexpr void advance( I& i, ranges::difference_type_t<I> n ); |
(1) | |
template< Iterator I, Sentinel<I> S > constexpr void advance( I& i, S bound ); |
(2) | |
template< Iterator I, Sentinel<I> S > constexpr ranges::difference_type_t<I> advance( I& i, ranges::difference_type_t<I> n, S bound ); |
(3) | |
n 次推進迭代器 i,或直至抵達 bound,先到為止。
1) 若
I
實現 RandomAccessIterator
,則等價於 i += n。否則自增(或若 n 為負則自減)i {{|n}} 次。若 n 為負且 I
不滿足 BidirectionalIterator
則行為未定義。2) 若滿足 Assignable<I&, S>,則等價於 {{{1}}}。
否則,若
[
i,
bound)
不代表範圍,則行為未定義。 否則,若 SizedSentinel<S, I> 得到滿足,則等價於 ranges::advance(i, bound - i)。
否則,自增 i 直至 i == bound。
3) 若 SizedSentinel<S, I> 得到滿足,則若 |n| >= |bound - i| 則等價於 ranges::advance(i, bound),否則等價於 ranges::advance(i, n)。
否則自增(或若 n 為負則自減)i n 次或直至 i == bound,先到為止。
若 n > 0,則
[
i,
bound)
應當代表一個範圍;若 n == 0,則 [
i,
bound)
或 [
bound,
i)
應當代表一個範圍;若 n < 0,則 [
bound,
i)
應當代表一個範圍,且 I
與 S
應當是同一類型,且 I
必須滿足 BidirectionalIterator
。否則,行為未定義。目錄 |
[編輯] 定製點對象
名稱 ranges::advance
代表一個定製點對象,它是字面 Semiregular
類類型的cpp/named req/FunctionObject(為說明目的以 AdvanceT
表示)。AdvanceT
的所有實例均相等。從而能自由地複製 ranges::advance
,且能交替使用其副本。
給定類型集合 Args...
,若 std::declval<Args>()... 滿足上面針對 ranges::advance
實參的要求,則 AdvanceT
將滿足 ranges::Invocable<const AdvanceT, Args...>。否則,沒有 AdvanceT
的函數調用運算符參與重載決議。
在每個定義 ranges::advance
的翻譯單元中,它都指代定製點對象的同一實例。(這表示能自由地在類似 inline 函數和函數模板的東西中使用它,而不違反單一定義規則。)
[編輯] 返回值
1,2) (無)
3) 由於抵達 bound 而不進行的自增/自減次數。換言之為 n - M,其中
M
是從 i 的開始位置到結束位置的距離,而若結束位置在開始位置之前則為負。[編輯] 示例
本節未完成 原因:暫無示例 |
[編輯] 參閱
令迭代器前進給定的距離 (函數模板) | |
返回迭代器和哨位之間的距離,或範圍起始和結尾間的距離 (函數模板) | |
自增迭代器 (函數模板) | |
自減迭代器 (函數模板) |