tgoop.com/cpp_geek/312
Create:
Last Update:
Last Update:
🧵 Сегодня покажу вам простой, но полезный приём для оптимизации копирования std::vector.
Часто вижу такую конструкцию:
std::vector<int> result;
result = getVector();
Если
getVector()
возвращает временный объект, то копирование можно избежать, используя std::move или Return Value Optimization (RVO).Но вот интересное: если вы точно знаете, что копия не нужна, используйте
std::vector::swap
с временным объектом:
std::vector<int> result;
std::vector<int> tmp = getVector();
result.swap(tmp);
Почему это может быть лучше?
🔸 Быстрая реализация через указатели.
🔸 Не вызывает лишние аллокаторы.
🔸 Не зависит от
move
конструктора.🔸 Гарантированно не бросает исключений, если
swap
noexcept (что обычно так).В новых компиляторах
result = std::move(tmp)
даст тот же эффект, но swap
— это старый добрый способ, который работает предсказуемо.🧠 Подумайте, где можно применить это у себя — особенно если работаете с большими контейнерами.
➡️ @cpp_geek
BY C++ geek
Share with your friend now:
tgoop.com/cpp_geek/312