2011-08-22 164 views
3

我知道如何在一個結構體中得到一個結構體,但是我無法工作的是結構體中的一個結構體的向量。初始化結構體中的一個向量struct

正常的基礎上創建一個結構的載體作品。比如用:

vector<struct> str1(100); 

,但我怎麼做,如果我有以下代碼:

struct attribures { 
    string name; 
    bool value; 
}; 

struct thing { 
    string name; 
    double y; 
    int x; 
    vector<attributes> attrib; 
}; 

哪有我現在初始化矢量的元素?有一件事我可以做的是像下面這樣:

attributes a; 
objec.attrib.push_back(a); // object is a struct of type thing 

但是這種解決方案似乎沒有那優雅給我。無論如何,這是更多的第一類?

編輯:抱歉的混亂。 「100」實際上只是一個例子,在第二個例子中,它實際上也僅僅是一個例子,它應該表明它可以如何完成,但對我來說看起來並不高雅。

+0

請澄清:你想做什麼?你的第一個例子顯示初始化向量有100個成員。你的第二個例子顯示了將單個元素推入矢量。這些不一樣。 –

回答

6

也許一個構造函數添加到attributes

struct attributes{ 
    attributes(const string& name, bool value) : name(name), value(value) {} 
    string name; 
    bool value; 
}; 

然後:

object.attrib.push_back(attributes("foo", true)); 
2

你的問題是不明確的,所以我試圖猜測你想要做什麼。如果你想要的東西總是與100個元素初始化,你需要使用一個構造函數(我也初始化x和y,因爲它們在默認情況下不確定的,所以這是很好的初始化它們):

struct thing { 
    string name; 
    double y; 
    int x; 
    vector<attributes> attrib; 
    thing() : y(0), x(0), attrib(100) {} 

}; 

如果你想建設100個元素的矢量用默認值:

attributes a; 
a.name = "fOO"; 
std::vector<attributes> attrib(100, a); 

這會給你有「富」作爲名稱的100個元素的向量。

當然,你可以結合這兩個例子;)

2

在C++ 0x中的情況下,有幾種可能性:

#include <vector> 
#include <string>  

int main() { 
    struct Person { 
     Person(std::string const &name, int age) : name (name), age(age) {} 
     std::string name; 
     int age; 
    }; 

    std::vector<Person> vec { {"John", 24}, 
           {"Dani", 32} }; 

    vec.emplace_back ("Frobster", -2); 
    vec.push_back ({"Little unknown rascal", 7}); 
} 

如果你不想寫非默認構造函數,你仍然可以做:

#include <vector> 
#include <string>  

int main() { 
    struct Person { 
     std::string name; 
     int age; 
    }; 

    std::vector<Person> vec { {"John", 24}, 
           {"Dani", 32} }; 

    vec.emplace_back (Person{"Frobster", -2}); 
    vec.push_back (Person{"Little unknown rascal", 7}); 
} 

雖然emplace_back是多餘的呢。