std::experimental::ranges::adjacent_find
來自 cppreference.com
< cpp | experimental | ranges
定義於標頭檔案 <experimental/ranges/algorithm> |
||
template< ForwardIterator I, Sentinel<I> S, class Proj = ranges::identity, IndirectRelation<projected<I, Proj>> Pred = ranges::equal_to<> > |
(1) | (範圍 TS) |
template< ForwardRange R, class Proj = ranges::identity, IndirectRelation<projected<ranges::iterator_t<R>, Proj>> Pred = ranges::equal_to<> > |
(2) | (範圍 TS) |
1) 在範圍
[
first,
last)
中搜索兩個連續的相同元素。元素在透過 proj 投影后,使用 pred 進行比較。儘管上述宣告所示,演算法宣告的實際模板引數數量和順序未指定。因此,如果在呼叫演算法時使用顯式模板引數,程式可能不可移植。
目錄 |
[編輯] 引數
first, last | - | 要檢查的元素範圍 |
r | - | 要檢查的元素範圍 |
pred | - | 用於比較投影元素的謂詞 |
proj | - | 應用於元素的投影 |
[編輯] 返回值
指向第一對相同元素中第一個元素的迭代器,即第一個迭代器 i
,使得 i
和 i + 1
都位於範圍 [
first,
last)
內,並且 ranges::invoke(pred, ranges::invoke(proj, *i), ranges::invoke(proj, *(i + 1))) != false。
如果未找到此類元素,則返回一個與 last 比較相等的迭代器。
[編輯] 複雜度
如果範圍非空,謂詞的呼叫次數恰好為 min((result - first) + 1, (last - first) - 1)
,其中 result
是返回值;投影的呼叫次數至多是謂詞呼叫次數的兩倍。
[編輯] 可能的實現
template<ForwardIterator I, Sentinel<I> S, class Proj = ranges::identity, IndirectRelation<projected<I, Proj>> Pred = ranges::equal_to<>> I adjacent_find(I first, S last, Pred pred = Pred{}, Proj proj = Proj{}) { if (first == last) return first; I next = first; ++next; while (next != last) { if (ranges::invoke(pred, ranges::invoke(proj, *first), ranges::invoke(proj, *next))) return first; ++next; ++first; } return next; } |
[編輯] 示例
本節不完整 原因:無示例 |
[編輯] 參閱
尋找第一對相等的(或滿足給定謂詞的)相鄰項 (函式模板) | |
移除一個範圍中的連續重複元素 (函式模板) |