Заполнить вектор с заданным размером с помощью std::push_back(value);

266
28 апреля 2019, 18:50

Есть вектор с заданным размером:

const int N=5;
vector<int>a(N);

Заполняю вектор методом push_back;

for (int i=0;i<N;++i)
{
    a.push_back(i+2);
}
for (int i:a)
{
    cout<<i<<" ";
}

Выводит N нулей, и сами элементы: 0 0 0 0 0 2 3 4 5 6 Как избавиться от нулей?

Answer 1

Вот этим:

vector<int>a(N);

вы создаете вектор, изначально заполненный N нулевыми элементами. Замените строку на

vector<int>a;

и все получится :)

Answer 2

Вы заполняете вектор дважды. Сначала конструктор создает N элементов, а потом вы добавляете в цикле еще N элементов. Имеет смысл создать пустой вектор, зарезервировав место под все элементы.

::std::size_t const items_count{5};
::std::vector<int> items{};
a.reserve(items_count);
::std::size_t item_index{};
for
(
    item_index = ::std::size_t{0};
    items_count != item_index;
    ++item_index
)
{
    items.emplace_back(static_cast<int>(item_index + ::std::size_t{2}));
}
READ ALSO
Неясное поведение шаблонов

Неясное поведение шаблонов

Есть следующая шаблонная функция:

123
(C++) Как заблокировать перемещение мыши?

(C++) Как заблокировать перемещение мыши?

делаю внутри игровое меню и столкнулся с проблемой, как заблокировать мышь?

117
GNU Make C++. Linux

GNU Make C++. Linux

Возможно, не совсем понимая что искать, не могу найти действующего примераПроект на C++, разбит на подпапки(src:Engine{Component, Utils}, Process{Objects,

165