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 圖形
 
 
 
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) (範圍 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) (範圍 TS)
1) 按順序,對範圍 [firstlast) 中的每個迭代器解引用後調用投影 proj 的結果調用給定的函數對象 f(即 ranges::invoke(f, ranges::invoke(proj, *i)))。
2)(1),但以 r 為源範圍,如同以 ranges::begin(r)first 並以 ranges::end(r)last

對於兩個重載,若迭代器類型可變,則 f 可以通過解引用後的迭代器修改範圍的元素。若 f 返回了結果,則忽略此結果。

不同於另外的算法,不允許 for_each 複製序列中的元素,即使它們為可平凡複製。

不同於 std::for_each(它只要求可移動構造 (MoveConstructible) ),這些函數要求 Fun 實現 CopyConstructible

儘管聲明描述如上,算法聲明的模板形參的實際數量和順序是未指定的。從而若在調用算法時使用顯式模板實參,則程序很可能不可移植。

目錄

[編輯] 參數

first, last - 要應用函數的範圍
r - 要應用函數的範圍
f - 應用到每個投射後的範圍中元素的可調用對象
proj - 應用到元素的投射

[編輯] 返回值

含有下列兩個成員的 tagged_pair

  • 第一成員帶標籤 tag::in,是源範圍的尾後迭代器(即比較等於哨位 lastI 類型的迭代器)。
  • 第二成員帶標籤 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)};
}

[編輯] 示例

[編輯] 參閱

應用一個函數到元素範圍
(函數模板) [編輯]
範圍 for 循環 (C++11) 執行範圍上的循環[編輯]
應用一元函數對象範圍中元素
(函數模板) [編輯]
應用函數對象到序列的前 N 個元素
(函數模板) [編輯]