2016-02-22 2 views
-2

Учитывая следующий код:Как инициализировать вектор объектов в C++?

vector<Worker> allWorkers; 
allWorkers.resize(10); 
for(int i=0; i<allWorkers.size(); i++){ 
    allWorkers.push_back(Worker()); 
} 

Код выше не работает. Все, что я хочу, это заполнить вектор объектами типа Worker. Как я могу это сделать?

+0

После того, как вы изменили добавление 'resize', почему вы вызываете' push_back' вообще? У вас уже есть ваши работники. – Kevin

+1

После вашего редактирования: 'allWorkers.resize (10);' уже заполняет ваш вектор 10 стандартными конструкциями 'Worker'. –

+0

Код, который я разместил, был упрощенной версией того, что я на самом деле написал. – tony

ответ

1

Либо один из них будет работать:

vector<Worker> allWorkers; 
int numberOfWorkersToAdd = 100; // put whatever number you want here 
for(int i=0; i<numberOfWorkersToAdd; i++){ 
    allWorkers.push_back(Worker()); 
} 

В качестве альтернативы:

vector<Worker> allWorkers; 
int numberOfWorkersToAdd = 100; // put whatever number you want here 
allWorkers.resize(numberOfWorkersToAdd); 

В зависимости от вашего случая использования могут быть и другие варианты.

+2

И, конечно, мой любимый:' vector allWorkers (100); ' – Chad

0

Ваша программа не добавлять объекты allWorkersallWorkers поскольку является пустой вектор после:

vector<Worker> allWorkers; 

Использование

size_t size = <some size>; 
vector<Worker> allWorkers(size); 

должны это сделать.

0

Вы создаете пустой вектор в первой строке.

В цикле for() вы повторяетесь до тех пор, пока не достигнете размера списка векторов. В этом случае размер равен 0, что означает, что итерация никогда не произойдет.

Я бы сначала нашел способ вычислить, сколько у вас объектов Worker и использовать этот размер в качестве ограничения цикла.

0

Или вы могли бы просто написать auto allWorkers = vector<Worker>(100,Worker()); где 100 - количество Рабочих.

+1

Второй аргумент пессимизация; если он опущен, то члены векторов будут построены по умолчанию. –

Смежные вопросы