Перемещающий итератор в C++
При переносе вместо копирования берут перемещающий итератор.
Функция make_move_iterator из iterator
оборачивает обычную позицию так, что
присваивание забирает ресурс. Подключите
string для вектора строк.
Запишем вектор с одной непустой строкой, скопируем через перемещающий итератор и выведем длину исходного элемента:
std::vector<std::string> src = {"data"};
std::vector<std::string> dst;
std::copy(
std::make_move_iterator(src.begin()),
std::make_move_iterator(src.end()),
std::back_inserter(dst)
);
std::cout << src[0].size() << "\n";
Печатается 0: строка в src
стала пустой, а dst получил текст.
Так экономят копирование тяжелых объектов
при смене владельца.
В векторе из двух непустых строк перенесите обе в новый вектор так, чтобы в источнике обе строки стали пустыми. Выведите сумму длин в приемнике.