std::move_backward
Материал из cppreference.com
<tbody>
</tbody>
| Определено в заголовочном файле <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) |
перемещает диапазон элементов в новое место (шаблон функции) |