C++ 如何初始化不同对象指针的向量?

C++ 如何初始化不同对象指针的向量?,c++,pointers,vector,C++,Pointers,Vector,我想看看是否可以在一行中初始化对象向量,因此我编写了以下示例: vector<Bar*> bar(5, new Bar()); bar[3]->hit++; for (int i = 0; i < 5; i++) cout << bar[i]->hit << endl; 它似乎对所有指针使用相同的新Bar()。是否可以初始化对象指针的向量以指向不同的对象?所有指针都指向同一位置,因此结果是预期的 vector<Bar*>

我想看看是否可以在一行中初始化对象向量,因此我编写了以下示例:

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

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

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

所有指针都指向同一位置,因此结果是预期的

vector<Bar*> bar(5, new Bar());
或者干脆

std::generate(bar.begin(),bar.end(), []{return new Bar();});
如果C++11是一个选项

这方面的输出将是

0
0
0
1
0

所有指针都指向同一位置,因此结果是预期的

vector<Bar*> bar(5, new Bar());
或者干脆

std::generate(bar.begin(),bar.end(), []{return new Bar();});
如果C++11是一个选项

这方面的输出将是

0
0
0
1
0

使用几个不同的值初始化向量需要C++11和对初始值设定项列表的支持:

std::vector<Bar*> v { new Bar, new Bar, new Bar, new Bar };
std::vector v{new Bar,new Bar,new Bar,new Bar};

您可能可以在C++11之前的版本中使用类似Boost.Assign的库。

初始化具有多个不同值的向量需要C++11和对初始值设定项列表的支持:

std::vector<Bar*> v { new Bar, new Bar, new Bar, new Bar };
std::vector v{new Bar,new Bar,new Bar,new Bar};
您可能可以在C++11之前的版本中使用类似Boost.Assign的库。

规范:

Effects: Constructs a vector with n copies of value [...]
其中n是第一个参数值,第二个参数值。

来自规范:

Effects: Constructs a vector with n copies of value [...]

其中n是第一个参数,值是第二个参数。

您可以使用一些
std::generate
magic,但问题是,您为什么要这样做?您可以使用一些
std::generate
magic,但问题是,您为什么要这样做?是的,但请不要仅为此而向应用程序添加增强功能。:)@karlphillip,无论如何,您可能应该添加增压:P@mauve如果您有
std::generate
,则不太可能。此外,初始化列表是一个ideea,但它并不适用于更大的数组。想象一个大小为100的数组。。。然后呢?是的,但请不要仅为此向应用程序添加Boost.:)@karlphillip,无论如何,您可能应该添加增压:P@mauve如果您有
std::generate
,则不太可能。此外,初始化列表是一个ideea,但它并不适用于更大的数组。想象一个大小为100的数组。。。然后呢?如果满足了这些要求,那么是lambda的理想场所:)如果满足了这些要求,那么是lambda的理想场所:)