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的理想场所:)