# 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 BidirectionalIterator.
• OutputIterator is a model of OutputIterator.
• 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

`reverse`, `copy`