# reverse_copy

Category: algorithms | Component type: function

### Prototype

    template <class BidirectionalIterator, class OutputIterator>
    OutputIterator reverse_copy(BidirectionalIterator first,
                                BidirectionalIterator last,
                                OutputIterator result);

### Description

`Reverse_copy` copies elements from the range `[first, last)` to the range `[result, result + (last - first))` such that the copy is a reverse of the original range. Specifically: for every `i` such that `0 <= i < (last - first)`, `reverse_copy` performs the assignment `*(result + (last - first) - i) = *(first + i)`.

The return value is `result + (last - first)`.

### Definition

Defined in the standard header algorithm, and in the nonstandard backward-compatibility header algo.h.

### Requirements on types

- BidirectionalIterator is a model of Bidirectional Iterator.
- OutputIterator is a model of Output Iterator.
- The value type of BidirectionalIterator is convertible to a type in OutputIterator's set of value types.

### Preconditions

- `[first, last)` is a valid range.
- There is enough space to hold all of the elements being copied. More formally, the requirement is that `[result, result + (last - first))` is a valid range.
- The ranges `[first, last)` and `[result, result + (last - first))` do not overlap.

### Complexity

Linear: exactly `last - first` assignments.

### Example

    vector<int> V;
    V.push_back(0);
    V.push_back(1);
    V.push_back(2);
    copy(V.begin(), V.end(), ostream_iterator<int>(cout, " "));
                    // Output: 0 1 2
    list<int> L(V.size());
    reverse_copy(V.begin(), V.end(), L.begin());
    copy(L.begin(), L.end(), ostream_iterator<int>(cout, " "));
                    // Output: 2 1 0

### Notes

### See also

`reverse`, `copy`

Copyright © 1999 Silicon Graphics, Inc. All Rights Reserved. TrademarkInformation