std::move_backward — cppreference.com
Материал из cppreference.com
<tbody> </tbody>
|
|
||
Перемещает элементы из диапазона [first, last) в другой диапазон, кончающийся в d_last. Элементы перемещаются в обратном порядке (последний элемент перемещается первым), но их относительный порядок сохраняется.
Параметры
[first, last)
|
— | два итератора задающих диапазон элементов для перемещения |
| d_last | — | конец целевого диапазона. Если d_last находится внутри [first, last), следует использовать std::move вместо std::move_backward.
|
| Требования к типам | ||
-BidirIt1 должен соответствовать требованиям BidirectionalIterator.
| ||
-BidirIt2 должен соответствовать требованиям BidirectionalIterator.
| ||
Возвращаемое значение
Итератор в целевом диапазоне, указывающий на последний перемещённый элемент.
Сложность
Ровно last - first присваиваний перемещения.
Возможная реализация
template< class BidirIt1, class BidirIt2 > BidirIt2 move_backward(BidirIt1 first, BidirIt1 last, BidirIt2 d_last) { while (first != last) { *(--d_last) = std::move(*(--last)); } return d_last; }
Пример
#include <algorithm> #include <vector> #include <string> #include <iostream> int main() { std::vector<std::string> src{"foo", "bar", "baz"}; std::vector<std::string> dest(src.size()); std::cout << "src: "; for (const auto &s : src) { std::cout << s << ' '; } std::cout << "\ndest: "; for (const auto &s : dest) { std::cout << s << ' '; } std::cout << '\n'; std::move_backward(src.begin(), src.end(), dest.end()); std::cout << "src: "; for (const auto &s : src) { std::cout << s << ' '; } std::cout << "\ndest: "; for (const auto &s : dest) { std::cout << s << ' '; } std::cout << '\n'; }
Вывод:
src: foo bar baz dest: src: dest: foo bar baz
См. также
| перемещает диапазон элементов в новое место (шаблон функции) [править] |