gpt4 book ai didi

c++ - 如何初始化不同对象指针的 vector ?

转载 作者:搜寻专家 更新时间:2023-10-31 01:13:09 24 4
gpt4 key购买 nike

我想看看我是否可以在一行中初始化一个对象 vector ,所以我写了下面的例子:

vector<Bar*> bar(5, new Bar());

bar[3]->hit++;
for (int i = 0; i < 5; i++)
cout << bar[i]->hit << endl;

但是当我运行它时,我得到:

1
1
1
1
1

它似乎对所有指针使用相同的新 Bar()。是否可以初始化对象指针 vector 以指向不同的对象?

最佳答案

你所有的指针都指向同一个位置,所以结果是预期的。

vector<Bar*> bar(5, new Bar());

不会为所有 5 个对象创建一个新的 Bar,而是使用 new Bar() 返回的值,这是一个指向内存位置的指针,生成 vector 。

要得到你期望的结果,你可以使用std::generate:

Bar* newBar() { return new Bar(); }

//...

vector<Bar*> bar(5);
std::generate(bar.begin(),bar.end(),newBar);

或者只是

std::generate(bar.begin(),bar.end(), []{return new Bar();});

如果 C++11 是一个选项。

这个的输出将是

0
0
0
1
0

关于c++ - 如何初始化不同对象指针的 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12941675/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com