我想創造的10 Foo
成員陣列,每個初始化爲Foo(8, "10")
,這樣的事情:如何初始化類類型變量的成員數組?
Foo bar = new Foo(8, "10")[10]; //like this
我怎樣才能做到這一點?
我想創造的10 Foo
成員陣列,每個初始化爲Foo(8, "10")
,這樣的事情:如何初始化類類型變量的成員數組?
Foo bar = new Foo(8, "10")[10]; //like this
我怎樣才能做到這一點?
假設你要初始化的類型Foo
的10個對象,你應該在C++中使用vector
:
std::vector<Foo> foos(10, Foo(8, "10"));
最簡單的方法是使用一個std::vector
這樣的:
struct A {
std::vector<Foo> bar;
A() : bar(10, Foo(8, "10")) {}
};
std::vector
可以像普通數組一樣使用,另外還有一些整潔的額外功能here。
如果vector
校樣的動態分配太慢,編號10
是編譯時間常數,則可以使用std::array
代替。但是,語法不太好,差異很可能可以忽略不計。
如果數組的大小是恆定的,小的,你可以使用:
foo array_of_foos[3] =
{
foo(8, "10"),
foo(8, "10"),
foo(8, "10")
};
其他唯一的方法是使用for()循環,但這個工作FOO還必須有無參數構造函數(aka foo()
)
xtofl的使用向量的答案也起作用,假設您可以使用矢量而不是數組。
如果數組的大小很小,那麼您可以爲數組的每個元素明確指定一個初始值設定項。
例如
#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
但是,如果你要動態地分配一個數組然後一個較好的方法是使用在頭<vector>
聲明標準類std::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
等。
所以你想要一個10'Foo'的成員數組,每個都被初始化爲'Foo(8,「10」)'? –
@BaummitAugen準確無誤。這就是我想要的。 – Gear