std::reverse_copy
Материал из cppreference.com
<tbody>
</tbody>
| Определено в заголовочном файле <algorithm>
|
||
template< class BidirIt, class OutputIt > OutputIt reverse_copy( BidirIt first, BidirIt last, OutputIt d_first ); |
||
Копирует элементы из диапазона [first, last) в диапазон, начинающийся с d_first, таким образом, что элементы в новом диапазоне располагаются в обратном порядке.
Параметры
[first, last)
|
— | два итератора задающих диапазон элементов для копирования |
| d_first | — | начало целевого диапазона |
| Требования к типам | ||
-BidirIt должен соответствовать требованиям BidirectionalIterator.
| ||
-OutputIt должен соответствовать требованиям OutputIterator.
| ||
Возвращаемое значение
Output-итератор на элемент, следующий за последним скопированным.
Возможная реализация
template<class BidirIt, class OutputIt>
OutputIt reverse_copy(BidirIt first, BidirIt last, OutputIt d_first)
{
while (first != last) {
*(d_first++) = *(--last);
}
return d_first;
}
|
Пример
Запустить этот код
#include <vector>
#include <iostream>
#include <algorithm>
int main()
{
std::vector<int> v({1,2,3});
std::for_each(std::begin(v), std::end(v),
[&](int value){ std::cout << value << " "; });
std::cout << std::endl;
std::vector<int> destiny(3);
std::reverse_copy(std::begin(v), std::end(v), std::begin(destiny));
std::for_each(std::begin(destiny), std::end(destiny),
[&](int value){ std::cout << value << " "; });
std::cout << std::endl;
}
Вывод:
1 2 3
3 2 1
Сложность
Линейная по расстоянию между first и last.
См. также
| меняет порядок элементов в диапазоне на обратный (шаблон функции) |