2016-01-26 88 views
-2

我想創造的10 Foo成員陣列,每個初始化爲Foo(8, "10"),這樣的事情:如何初始化類類型變量的成員數組?

Foo bar = new Foo(8, "10")[10]; //like this 

我怎樣才能做到這一點?

+0

所以你想要一個10'Foo'的成員數組,每個都被初始化爲'Foo(8,「10」)'? –

+0

@BaummitAugen準確無誤。這就是我想要的。 – Gear

回答

2

假設你要初始化的類型Foo的10個對象,你應該在C++中使用vector

std::vector<Foo> foos(10, Foo(8, "10")); 
0

最簡單的方法是使用一個std::vector這樣的:

struct A { 
    std::vector<Foo> bar; 
    A() : bar(10, Foo(8, "10")) {} 
}; 

std::vector可以像普通數組一樣使用,另外還有一些整潔的額外功能here

如果vector校樣的動態分配太慢,編號10是編譯時間常數,則可以使用std::array代替。但是,語法不太好,差異很可能可以忽略不計。

0

如果數組的大小是恆定的,小的,你可以使用:

foo array_of_foos[3] = 
{ 
    foo(8, "10"), 
    foo(8, "10"), 
    foo(8, "10") 
}; 

其他唯一的方法是使用for()循環,但這個工作FOO還必須有無參數構造函數(aka foo()

xtofl的使用向量的答案也起作用,假設您可以使用矢量而不是數組。

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 

但是,如果你要動態地分配一個數組然後一個較好的方法是使用在頭<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::fillstd::generate等。

相關問題