名稱空間
變體
操作

std::experimental::ranges::for_each

來自 cppreference.com
< cpp‎ | experimental‎ | ranges
 
 
實驗性
技術規範
檔案系統庫 (檔案系統 TS)
庫基礎 (庫基礎 TS)
庫基礎 2 (庫基礎 TS v2)
庫基礎 3 (庫基礎 TS v3)
並行性擴充套件 (並行性 TS)
並行性擴充套件 2 (並行性 TS v2)
併發性擴充套件 (併發性 TS)
併發擴充套件 2 (併發 TS v2)
概念 (概念 TS)
範圍 (範圍 TS)
反射 (反射 TS)
數學特殊函式 (特殊函式 TR)
實驗性非 TS
模式匹配
線性代數
std::execution
契約
2D 圖形
 
 
 
定義於標頭檔案 <experimental/ranges/algorithm>
template< InputIterator I, Sentinel<I> S, class Proj = ranges::identity,

          IndirectUnaryInvocable<projected<I, Proj>> Fun >
ranges::tagged_pair<tag::in(I), tag::fun(Fun)>

    for_each( I first, S last, Fun f, Proj proj = Proj{} );
(1) (ranges TS)
template< InputRange R, class Proj = ranges::identity,

          IndirectUnaryInvocable<projected<ranges::iterator_t<R>, Proj>> Fun >
ranges::tagged_pair<tag::in(ranges::safe_iterator_t<R>), tag::fun(Fun)>

    for_each( R&& r, Fun f, Proj proj = Proj{} );
(2) (ranges TS)
1) 對範圍 [firstlast) 中解引用每個迭代器的結果(即 ranges::invoke(f, ranges::invoke(proj, *i)))按順序呼叫給定函式物件 f,並應用投影 proj
2)(1),但使用 r 作為源範圍,如同使用 ranges::begin(r) 作為 firstranges::end(r) 作為 last

對於兩個過載,如果迭代器型別是可變的,則 f 可以透過解引用迭代器修改範圍的元素。如果 f 返回結果,則該結果被忽略。

與其餘演算法不同,即使序列中的元素是可平凡複製的,也不允許 for_each 複製它們。

std::for_each(僅要求 MoveConstructible)不同,這些函式要求 Fun 模擬 CopyConstructible

儘管上述宣告所示,演算法宣告的實際模板引數數量和順序未指定。因此,如果在呼叫演算法時使用顯式模板引數,程式可能不可移植。

目錄

[編輯] 引數

first, last - 要應用函式的範圍
r - 要應用函式的範圍
f - 要應用於範圍內每個投影元素的的可呼叫物件
proj - 應用於元素的投影

[編輯] 返回值

一個 tagged_pair 物件,包含以下兩個成員

  • 第一個成員,帶有標籤 tag::in,是源範圍的結束迭代器(即型別為 I 且與哨兵 last 比較相等的迭代器)。
  • 第二個成員,帶有標籤 tag::fun,從 std::move(f) 初始化(在所有函式物件應用之後)。

[編輯] 複雜度

正好 last - firstfproj 的應用。

[編輯] 可能的實現

template<InputIterator I, Sentinel<I> S, class Proj = ranges::identity,
         IndirectUnaryInvocable<ranges::projected<I, Proj>> Fun>
auto for_each(I first, S last, Fun f, Proj proj = Proj{}) 
    -> ranges::tagged_pair<tag::in(I), tag::fun(Fun)>
{
    for (; first != last; ++first)
        ranges::invoke(f, ranges::invoke(proj, *first));
    return {std::move(first), std::move(f)};
}

[編輯] 示例

[編輯] 另請參閱

對一個範圍的元素應用函式
(函式模板) [編輯]
range-for 迴圈(C++11) 對範圍執行迴圈[編輯]
範圍中的元素應用一元函式物件
(函式模板) [編輯]
對序列中的前 N 個元素應用函式物件
(函式模板) [編輯]