Я relativly новичок в C++, и это может быть глупый вопрос, но я пытаюсь понять rValue
и lValue
ссылки на данный момент, и это пришло мне в голову:C++ скопировать карту в вектор с станд :: двигаться
Предположим, у нас есть карта (которая поступает из базы данных или что-то еще), и мы хотим скопировать все ее значения в вектор.
void insertItems(std::vector<std::string>& v)
{
std::map<int, std::string> names = loadFromDb();
for (auto& kv : names)
{
v.push_back(std::move(kv.second));
}
}
Можно ли использовать std::move
здесь? std::string
предоставляет конструктор перемещения и (возможно, не для строки, но для более крупных объектов) конструктор перемещения намного быстрее, чем конструктор копирования. Также мы знаем, что мы не используем элементы карты где-то еще, и они выходят за рамки, как только мы покидаем функцию. Так верно ли мое презумпция?
Я не вижу противоречия в своих мыслях, но это сложная тема, и я боюсь пропустить что-то. P.S .: Я думаю, что вопрос не самый лучший. Если у вас есть лучший, не стесняйтесь его редактировать.
Реализация правильная. «v.reserve» - это еще одна оптимизация. – Jarod42
О, и помните, что 'v' не является указателем. –
О да, спасибо, вы абсолютно правы. Я исправил это – Cilenco