tg-me.com/cpp_geek/306
Last Update:
Сегодня покажу вам полезную вещь, которую часто упускают даже опытные C++ разработчики - Альтернативные способы инициализации std::vector
.
🔹 std::vector: Инициализация — больше, чем просто {}
Многие используют векторы так:
std::vector<int> v = {1, 2, 3};
Но есть и другие варианты, которые помогут сделать код выразительнее, а в некоторых случаях — эффективнее.
🔸 1. Инициализация с количеством элементов и значением
std::vector<int> v(5, 10); // 5 элементов по 10
🔥 Часто полезно, когда нужен предзаполненный буфер.
🔸 2. С использованием
std::fill
std::vector<int> v(10);
std::fill(v.begin(), v.end(), 7);
✅ Удобно, когда вектор уже создан, но нужно всё заполнить определённым значением.
🔸 3.
std::generate
и std::iota
std::vector<int> v(10);
std::iota(v.begin(), v.end(), 1); // 1, 2, 3, ..., 10
🚀 Идеально подходит, когда нужно создать диапазон значений.
🔸 4. Из другой коллекции (через итераторы)
std::list<int> lst = {4, 5, 6};
std::vector<int> v(lst.begin(), lst.end());
🔄 Позволяет гибко конвертировать контейнеры.
🔸 5. Через
reserve
+ emplace_back
std::vector<std::pair<int, int>> v;
v.reserve(3);
v.emplace_back(1, 2);
v.emplace_back(3, 4);
v.emplace_back(5, 6);
🔧 Отлично, когда важна производительность и хочется избежать лишнего копирования.
✅ Совет: Не забывайте про
reserve
, если знаете итоговый размер вектора — избежите лишних реаллокаций.Надеюсь, вы узнали что-то новое. Поделитесь, какие приёмы чаще используете вы?
➡️ @cpp_geek
BY C++ geek
Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283
Share with your friend now:
tg-me.com/cpp_geek/306