Як найпростіше ініціалізувати std::вектор з жорстко заданими елементами?
Я можу створити масив і ініціалізувати його ось так:
int a[] = {10, 20, 30};
Як створити std::vector
і так само елегантно його ініціалізувати?
Найкращий спосіб, який я знаю, такий:
std::vector<int> ints;
ints.push_back(10);
ints.push_back(20);
ints.push_back(30);
Чи є кращий спосіб?
577
3
Якщо ваш компілятор підтримує C++11, ви можете просто зробити це:
Це доступно у GCC починаючи з версії 4.4. На жаль, VC++ 2010, здається, відстає у цьому відношенні.
В якості альтернативи, бібліотека Boost.Assign використовує не-макромагію, щоб дозволити наступне:
Або:
Але майте на увазі, що це пов'язано з деякими накладними витратами (по суті,
list_of
створюєstd::deque
під капотом), тому для критично важливого до продуктивності коду вам краще зробити так, як каже Yacoby.Одним з методів може бути використання масиву для ініціалізації вектора
У C++0x ви зможете зробити це так само, як і з масивом, але не в поточному стандарті.
За допомогою лише мовної підтримки, якою ви можете користуватись:
Якщо ви можете додати інші бібліотеки, ви можете спробувати boost::assignment:
Щоб уникнути жорсткого кодування розміру масиву: