2011-08-22 125 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是多余的呢。