SGI

copy_backward

Category: algorithms Component type: function

Prototype

template <class BidirectionalIterator1
class BidirectionalIterator2>
BidirectionalIterator2 copy_backward(BidirectionalIterator1 first

                                     BidirectionalIterator1 last

                                     BidirectionalIterator2 result);

Description

Copy_backward copies elements from the range [first last) to the range [result - (last - first) result) [1]. That is it performs the assignments *(result - 1) = *(last - 1) *(result - 2) = *(last - 2) and so on. Generally for every integer n from 0 to last - first copy_backward performs the assignment *(result - n - 1) = *(last - n - 1). Assignments are performed from the end of the input sequence to the beginning i.e. in order of increasing n. [2]

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

Preconditions

Complexity

Linear. Exactly last - first assignments are performed.

Example

vector<int> V(15);
iota(V.begin()
V.end()
1);
copy_backward(V.begin()
V.begin() + 10
V.begin() + 15);

Notes

[1] Result is an iterator that points to the end of the output range. This is highly unusual: in all other STL algorithms that denote an output range by a single iterator that iterator points to the beginning of the range.

[2] The order of assignments matters in the case where the input and output ranges overlap: copy_backward may not be used if result is in the range [first last). That is it may not be used if the end of the output range overlaps with the input range but it may be used if the beginning of the output range overlaps with the input range; copy has opposite restrictions. If the two ranges are completely nonoverlapping of course then either algorithm may be used.

See also

copy copy_n
[Silicon Surf] [STL Home]
Copyright © 1999 Silicon Graphics Inc. All Rights Reserved. TrademarkInformation