std::move_backward
Материал из cppreference.com
Определено в заголовочном файле <algorithm>
|
||
template< class BidirIt1, class BidirIt2 > BidirIt2 move_backward( BidirIt1 first, BidirIt1 last, BidirIt2 d_last ); |
||
Перемещает элементы из диапазона [
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
[править] См. также
(C++11) |
перемещает диапазон элементов в новое место (шаблон функции) |