考虑下面的代码:如何初始化C++中的对象向量?
vector<Worker> allWorkers;
allWorkers.resize(10);
for(int i=0; i<allWorkers.size(); i++){
allWorkers.push_back(Worker());
}
上面的代码不起作用。我只需要用Vector类型的对象填充矢量。我怎样才能做到这一点?
考虑下面的代码:如何初始化C++中的对象向量?
vector<Worker> allWorkers;
allWorkers.resize(10);
for(int i=0; i<allWorkers.size(); i++){
allWorkers.push_back(Worker());
}
上面的代码不起作用。我只需要用Vector类型的对象填充矢量。我怎样才能做到这一点?
无论这些人会工作:
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);
根据您的使用情况下,可能有其他的选择了。
当然,我最喜欢的:'vector
你的程序没有任何对象添加到allWorkers
因为allWorkers
是后一个空向量:
vector<Worker> allWorkers;
使用
size_t size = <some size>;
vector<Worker> allWorkers(size);
应该这样做。
您正在第一行创建一个空向量。
在您的for()循环中,您正在迭代,直到达到向量列表的大小。在这种情况下,大小为0,这意味着迭代永远不会发生。
我会首先找到一种方法来计算你有多少工人对象,并使用该大小作为循环约束。
或者你可以只写 auto allWorkers = vector<Worker>(100,Worker());
其中100是工人的数量。
第二个参数是一种悲观;如果省略,那么矢量成员将被默认构建。 –
编辑添加'resize'后,为什么要调用'push_back'呢?你已经有你的工人。 – Kevin
编辑完成后:'allWorkers.resize(10);'已经用10个默认构造的'Worker'实例填充你的矢量。 –
我发布的代码是我实际编写的简化版本。 – tony