2016-02-22 29 views
-2

考虑下面的代码:如何初始化C++中的对象向量?

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

上面的代码不起作用。我只需要用Vector类型的对象填充矢量。我怎样才能做到这一点?

+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

你的程序没有任何对象添加到allWorkers因为allWorkers是后一个空向量:

vector<Worker> allWorkers; 

使用

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

应该这样做。

0

您正在第一行创建一个空向量。

在您的for()循环中,您正在迭代,直到达到向量列表的大小。在这种情况下,大小为0,这意味着迭代永远不会发生。

我会首先找到一种方法来计算你有多少工人对象,并使用该大小作为循环约束。

0

或者你可以只写 auto allWorkers = vector<Worker>(100,Worker()); 其中100是工人的数量。

+1

第二个参数是一种悲观;如果省略,那么矢量成员将被默认构建。 –