Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::reverse_copy

      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 BidirIt,class OutputIt>

      OutputIt reverse_copy( BidirIt first, BidirIt last,

                             OutputIt d_first);
      (1)(constexpr since C++20)
      template<class ExecutionPolicy,class BidirIt,class ForwardIt>

      ForwardIt reverse_copy( ExecutionPolicy&& policy,
                              BidirIt first, BidirIt last,

                              ForwardIt d_first);
      (2)(since C++17)
      1) Given\(\scriptsize N\)N asstd::distance(first, last). Copies the elements from the range[firstlast) (source range) to another range of\(\scriptsize N\)N elements beginning atd_first (destination range) in such a way that the elements in the destination range are in reverse order.
      Behaves as if by executing the assignment*(d_first+ N-1- i)=*(first+ i)[1] once for each integeri in[0N).
      If source and destination ranges overlap, the behavior is undefined.
      2) Same as(1), but 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)

      Contents

      [edit]Parameters

      first, last - the pair of iterators defining the sourcerange of elements to copy
      d_first - the beginning of the destination range
      Type requirements
      -
      BidirIt must meet the requirements ofLegacyBidirectionalIterator.
      -
      OutputIt must meet the requirements ofLegacyOutputIterator.
      -
      ForwardIt must meet the requirements ofLegacyForwardIterator.

      [edit]Return value

      Output iterator to the element past the last element copied.

      [edit]Complexity

      Exactly\(\scriptsize N\)N assignments.

      [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 implementations inlibstdc++,libc++, andMSVC STL.

      template<class BidirIt,class OutputIt>constexpr// since C++20OutputIt reverse_copy(BidirIt first, BidirIt last, OutputIt d_first){for(; first!= last;++d_first)*d_first=*(--last);return d_first;}

      [edit]Notes

      Implementations (e.g.MSVC STL) may enable vectorization when the both iterator types satisfyLegacyContiguousIterator and have the same value type, and the value type isTriviallyCopyable.

      [edit]Example

      Run this code
      #include <algorithm>#include <iostream>#include <vector> int main(){auto print=[](conststd::vector<int>& v){for(constauto& value: v)std::cout<< value<<' ';std::cout<<'\n';}; std::vector<int> v{1,2,3};    print(v); std::vector<int> destination(3);    std::reverse_copy(std::begin(v),std::end(v),std::begin(destination));    print(destination);     std::reverse_copy(std::rbegin(v),std::rend(v),std::begin(destination));    print(destination);}

      Output:

      1 2 3 3 2 1 1 2 3

      [edit]Defect reports

      The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

      DRApplied toBehavior as publishedCorrect behavior
      LWG 2074C++98for eachi, the assignment was
      *(d_first+ N- i)=*(first+ i)[1]
      corrected to
      *(d_first+ N-1- i)=*(first+ i)[1]
      LWG 2150C++98only one element was required to be assignedcorrected the requirement
      1. 1.01.11.2LegacyOutputIterator is not required to support binary+ and-. The usages of+ and- here are exposition-only: the actual computation does not need to use them.

      [edit]See also

      reverses the order of elements in a range
      (function template)[edit]
      creates a copy of a range that is reversed
      (algorithm function object)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/algorithm/reverse_copy&oldid=180512"

      [8]ページ先頭

      ©2009-2025 Movatter.jp