我想创建一个10 Foo
的成员数组,每个数组都初始化为Foo(8, "10")
,如下所示:
Foo bar = new Foo(8, "10")[10]; //like this
我怎样才能做到这一点?
答案 0 :(得分:2)
假设您要初始化10个Foo
类型的对象,您应该在C ++中使用vector
:
std::vector<Foo> foos( 10, Foo(8, "10"));
答案 1 :(得分:0)
最简单的方法是使用这样的std::vector
:
struct A {
std::vector<Foo> bar;
A() : bar(10, Foo(8, "10")) {}
};
std::vector
可以像普通数组一样使用,另外还有一些简洁的额外功能here。
如果vector
证明的动态分配太慢且编号10
是编译时常量,则可以使用std::array
代替。但是,语法不是那么漂亮,差异很可能是微不足道的。
答案 2 :(得分:0)
如果数组的大小恒定且很小,您可以使用:
foo array_of_foos[3] =
{
foo(8, "10"),
foo(8, "10"),
foo(8, "10")
};
唯一的另一种方法是使用for()循环,但为了工作,foo还必须有一个无参数的构造函数(又名foo()
)
xtofl使用向量的答案也有效,假设您可以使用向量而不是数组。
答案 3 :(得分:0)
如果数组的大小很小,那么您可以为数组的每个元素显式指定初始值设定项。
例如
#include <iostream>
struct A
{
A( int x, int y ) : x( x ), y( y ) {}
int x, y;
};
int main()
{
const size_t N = 10;
A *a = new A[N]
{
{ 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 },
{ 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }
};
for ( size_t i = 0; i < N; i++ ) std::cout << a[i].x << ' ' << a[i].y << std::endl;
delete [] a;
}
程序输出
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
但是如果要动态分配数组,那么更好的方法是使用标头std::vector
中声明的标准类<vector>
。
您可以使用与例如
相同的初始化列表 std::vector<A> v =
{
{ 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 },
{ 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }
};
或者您可以首先使用默认值
初始化所有元素std::vector<A> v( N, { 0, 0 } );
然后使用例如std::fill
,std::generate
等标准算法重新分配它们。