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 подскажет развёрнутый ответ в реальном времени.