2016-08-03 67 views
-1

在我提出我的問題之前,讓我提前提及,我知道這個話題已經討論了很多,但再次通過查看大多數答案,我沒有找到正確的方法實現我想要的東西(最有可能的是因爲我錯過了從給出的水中)。 所以,假設我想創建20次對象的矢量(比如說每個大小爲10的),它應該是全局範圍的(從這個意義上說,這是在一個類中完成的,我希望這些對象的矢量在類)。 所以,我真的不知道,如果以下是有效的:對象向量的初始化

for (int i =0; i<20; i++) 
vector<A> * vec_of_class = new vector<A>(10); 
/*where A is the class and I use new to have them in the heap, 
so that they won't be local */ 

現在,我知道這意味着我應該與處理它們 並確保我preper刪除它們額外小心,但我不知道我正在做的操作是否有效。一般來說,我想實現初始化可以在全局範圍內使用的對象A的20個不同向量(操作發生在其他類的函數內部),我知道它可以使用對象向量的向量A,但我想知道如何正確地完成這種操作(在另一個類的主體函數內部初始化20個不同的對象A向量並全局使用它們)。 我希望,我的問題不是混淆,你可以在這裏給我一些幫助。

+0

好的,這就是我也想做的,但是我該如何正確操作呢? – user3111197

+1

爲什麼不只是'vector > vec_o​​f_class(20,vector (10));'? – DimChtz

+0

我懷疑你想要一個像這樣的類成員:'std :: vector >成員{20,std :: vector (10)};'。 Et瞧,每個10個元素的20個向量。 –

回答

4

當您動態分配任何標準容器(包括向量)時,絕對不應該有這種情況。所以std::vector<> = new <>總是錯的。

要初始化矢量,可以使用多種技巧。我覺得初始化列表特別方便,喜歡這裏:

std::vector<int> vec{10, 20, 30, 40, 50}; 
+0

是不是矢量 vec = {10,20,30,40,50}; ? –

+0

@OmidCompSCI兩者均有效 – DimChtz

+0

@OmidCompSCI Google _uniform initialisation_。 –

0

所以,說我要創造20倍的物體的向量(比如說每個大小十)

這很容易。用途:

std::vector<std::vector<A>> my_data{20, std::vector<A>{10}}; 

,應該是全球範圍的(在這個意義上,這是一個類內部完成,我希望對象的這些載體類的外部傳遞)。

我沒有清楚的想知道你想在這裏完成什麼。

當在課堂內完成某些事情時,可以在static成員函數或常規成員函數中完成。看起來你應該使用static成員函數,但我不確定。

如果使用static成員函數,我建議:

std::vector<std::vector<A>> const& TheClass::get_my_data() 
{ 
    static std::vector<std::vector<A>> my_data{20, std::vector<A>{10}}; 
    static bool inited = false; 
    if (!inited) 
    { 
     // Set the values of the elements in my_data 
     // ... 

     inited = true; 
    } 
    return my_data; 
} 

如果使用普通的成員函數,我建議在構造函數中填充my_data和從函數返回。

// Need to make my_data a member variable 
TheClass::TheClass() : my_data{20, std::vector<A>{10}} 
{ 
    // Set the values of the elements in my_data 
    // ... 
} 

std::vector<std::vector<A>> const& TheClass::get_my_data() const 
{ 
    return my_data; 
}