Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::for_each_n

      From cppreference.com
      <cpp‎ |algorithm
       
       
      Algorithm library
      Constrained algorithms and algorithms on ranges(C++20)
      Constrained algorithms, e.g.ranges::copy,ranges::sort, ...
      Execution policies(C++17)
      Sorting and related operations
      Partitioning operations
      Sorting operations
      Binary search operations
      (on partitioned ranges)
      Set operations (on sorted ranges)
      Merge operations (on sorted ranges)
      Heap operations
      Minimum/maximum operations
      (C++11)
      (C++17)
      Lexicographical comparison operations
      Permutation operations
      C library
      Numeric operations
      Operations on uninitialized memory
       
      Defined in header<algorithm>
      template<class InputIt,class Size,class UnaryFunc>
      InputIt for_each_n( InputIt first, Size n, UnaryFunc f);
      (1)(since C++17)
      (constexpr since C++20)
      template<class ExecutionPolicy,

               class ForwardIt,class Size,class UnaryFunc>
      ForwardIt for_each_n( ExecutionPolicy&& policy,

                            ForwardIt first, Size n, UnaryFunc f);
      (2)(since C++17)

      Applies the given function objectf to the result of dereferencing every iterator in the range[firstfirst+ n). Iff returns a result, the result is ignored.

      1)f is applied in order starting fromfirst.
      IfUnaryFunc is notMoveConstructible, the behavior is undefined.
      2)f might not be applied in order. The algorithm is executed according topolicy.
      This overload participates in overload resolution only if all following conditions are satisfied:

      std::is_execution_policy_v<std::decay_t<ExecutionPolicy>> istrue.

      (until C++20)

      std::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>> istrue.

      (since C++20)
      IfUnaryFunc is notCopyConstructible, the behavior is undefined.

      Ifn>=0 is nottrue, the behavior is undefined.

      If the iterator type (InputIt/ForwardIt) is mutable,f may modify the elements of the range through the dereferenced iterator.

      Unlike the rest of the parallel algorithms,for_each_n is not allowed to make copies of the elements in the sequence even if they areTriviallyCopyable.

      Contents

      [edit]Parameters

      first - the beginning of the range to apply the function to
      n - the number of elements to apply the function to
      policy - theexecution policy to use
      f - function object, to be applied to the result of dereferencing every iterator in the range[firstfirst+ n)

      The signature of the function should be equivalent to the following:

       void fun(const Type&a);

      The signature does not need to haveconst&.
      The type Type must be such that an object of typeInputIt can be dereferenced and then implicitly converted to Type.

      Type requirements
      -
      InputIt must meet the requirements ofLegacyInputIterator.
      -
      ForwardIt must meet the requirements ofLegacyForwardIterator.
      -
      Size must be convertible to an integral type.

      [edit]Return value

      An iterator equal tofirst+ n, or more formally, tostd::advance(first, n).

      [edit]Complexity

      Exactlyn applications off.

      [edit]Exceptions

      The overload with a template parameter namedExecutionPolicy reports errors as follows:

      • If execution of a function invoked as part of the algorithm throws an exception andExecutionPolicy is one of thestandard policies,std::terminate is called. For any otherExecutionPolicy, the behavior is implementation-defined.
      • If the algorithm fails to allocate memory,std::bad_alloc is thrown.

      [edit]Possible implementation

      See also the implementation inlibstdc++,libc++ andMSVC stdlib.

      template<class InputIt,class Size,class UnaryFunc>InputIt for_each_n(InputIt first, Size n, UnaryFunc f){for(Size i=0; i< n;++first,(void)++i)        f(*first); return first;}

      [edit]Example

      Run this code
      #include <algorithm>#include <iostream>#include <vector> void println(autoconst& v){for(auto count{v.size()};constauto& e: v)std::cout<< e<<(--count?", ":"\n");} int main(){std::vector<int> vi{1,2,3,4,5};    println(vi);     std::for_each_n(vi.begin(),3,[](auto& n){ n*=2;});    println(vi);}

      Output:

      1, 2, 3, 4, 52, 4, 6, 4, 5

      [edit]See also

      applies a function to a range of elements, storing results in a destination range
      (function template)[edit]
      range-for loop(C++11) executes loop over range[edit]
      applies a unaryfunction object to elements from arange
      (function template)[edit]
      applies a function object to the first N elements of a sequence
      (algorithm function object)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/algorithm/for_each_n&oldid=170216"

      [8]ページ先頭

      ©2009-2025 Movatter.jp