◐ Shell
clean mode source ↗

std::copy_backward — cppreference.com

Материал из cppreference.com

<tbody> </tbody>

template< class BidirectionalIterator1, class BidirectionalIterator2 > BidirectionalIterator2 copy_backward( BidirectionalIterator1 first, BidirectionalIterator1 last, BidirectionalIterator2 d_last );

Копирует элементы из промежутка [firstlast) в промежуток, кончающийся в d_last. Элементы копируются в обратном порядке (последний элемент копируется первым), но их относительный порядок сохраняется.

Параметры

[firstlast) два итератора задающих диапазон элементов для копирования
d_last конец целевого промежутка. Если d_last находится внутри [first, last), то вместо std::copy_backward нужно использовать std::copy.

Возвращаемое значение

итератор на последний скопированный элемент.

Сложность

Ровно last - first присваиваний.

Возможная реализация

template< class BidirectionalIterator1, class BidirectionalIterator2 >
BidirectionalIterator2 copy_backward(BidirectionalIterator1 first,
                                     BidirectionalIterator1 last,
                                     BidirectionalIterator2 d_last)
{
    while (first != last) {
        *(--d_last) = *(--last);
    }
    return d_last;
}

Пример

#include <algorithm>
#include <iostream>
 
int main()
{
    std::vector<int> from_vector;
    for (int i = 0; i < 10; i++) {
        from_vector.push_back(i);
    }
 
    std::vector<int> to_vector(15);
 
    std::copy_backward(from_vector.begin(), from_vector.end(), to_vector.end());
 
    std::cout << "to_vector contains: ";
    for (unsigned int i = 0; i < to_vector.size(); i++) {
        std::cout << to_vector[i] << " ";
    }
 }

Вывод:

to_vector contains: 0 0 0 0 0 0 1 2 3 4 5 6 7 8 9

См. также