CPP_GEEK Telegram 306
Сегодня покажу вам полезную вещь, которую часто упускают даже опытные 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
👍113🥰1



tgoop.com/cpp_geek/306
Create:
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


Share with your friend now:
tgoop.com/cpp_geek/306

View MORE
Open in Telegram


Telegram News

Date: |

Administrators Just as the Bitcoin turmoil continues, crypto traders have taken to Telegram to voice their feelings. Crypto investors can reduce their anxiety about losses by joining the “Bear Market Screaming Therapy Group” on Telegram. Hui said the messages, which included urging the disruption of airport operations, were attempts to incite followers to make use of poisonous, corrosive or flammable substances to vandalize police vehicles, and also called on others to make weapons to harm police. End-to-end encryption is an important feature in messaging, as it's the first step in protecting users from surveillance.
from us


Telegram C++ geek
FROM American