РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
371 of 815 menu

Функция copy_backward

Функция copy_backward из заголовочного файла algorithm копирует элементы из исходного диапазона в целевой диапазон в обратном порядке. В отличие от функции copy, которая копирует элементы слева направо, copy_backward начинает копирование с последнего элемента и движется к первому. Это особенно полезно, когда целевой диапазон перекрывается с исходным, и копирование слева направо привело бы к перезаписи ещё не скопированных данных.

В первый и второй параметры мы передаём итераторы, задающие исходный диапазон [first, last). Третий параметр - итератор d_last, указывающий на конец целевого диапазона. Копирование идёт справа налево: элемент *(last - 1) попадает в *(d_last - 1) и так далее. Функция возвращает итератор на начало скопированного диапазона в приёмнике.

Синтаксис

#include <algorithm> copy_backward(first, last, d_last);

Пример

Давайте скопируем вектор {1, 2, 3, 4, 5} в другой вектор в обратном порядке:

#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { vector<int> src = {1, 2, 3, 4, 5}; vector<int> dst(5); copy_backward(src.begin(), src.end(), dst.end()); for (int el : dst) { cout << el << " "; } cout << endl; return 0; }

Результат выполнения кода:

1 2 3 4 5

Обратите внимание: хотя копирование идёт справа налево, порядок элементов в приёмнике сохраняется таким же, как в источнике, потому что последний элемент источника записывается в последнюю ячейку приёмника.

Пример

Главное преимущество copy_backward проявляется при перекрывающихся диапазонах. Сдвинем элементы вектора вправо на две позиции:

#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { vector<int> vec = {1, 2, 3, 4, 5, 0, 0}; copy_backward(vec.begin(), vec.begin() + 5, vec.end()); for (int el : vec) { cout << el << " "; } cout << endl; return 0; }

Результат выполнения кода:

1 2 1 2 3 4 5

Если бы мы использовали обычную copy, то при перекрытии диапазонов часть данных была бы затёрта до того, как её успели бы скопировать.

Смотрите также

  • функция copy,
    которая копирует элементы слева направо
  • функция copy_if,
    которая копирует элементы по условию
  • функция copy_n,
    которая копирует заданное число элементов
  • функция move,
    которая перемещает элементы диапазона
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить