Mediumалгоритмы

Чем std::move (algorithm) отличается от std::move (utility)?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

Это две разные функции с одинаковым именем в разных заголовках. std::move из <utility> — cast к rvalue для одного значения. std::move из <algorithm> — алгоритм, перемещающий диапазон.

#include <utility>    // std::move (cast)
#include <algorithm>  // std::move (algorithm)

std::string s = "hi";
std::string r = std::move(s);   // utility: одно значение, rvalue

std::vector<std::string> src{"a", "b"};
std::vector<std::string> dst(2);
std::move(src.begin(), src.end(), dst.begin());  // algorithm: диапазон
// также std::move_backward — для overlapping диапазонов
  • При using namespace std; что вызовется, зависит от аргументов (overload resolution);
  • Используйте полные имена или using-declaration, чтобы избежать двусмысленности;

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.