在结构中初始化结构的向量

时间:2011-08-22 10:44:42

标签: c++ class vector 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”实际上只是一个例子,在第二个例子中,它实际上也只是一个例子,它应该表明它是如何完成的,但对我来说似乎并不优雅。

3 个答案:

答案 0 :(得分: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));

答案 1 :(得分: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个元素的向量,其名称为“foo”。

当然,你可以结合两个例子;)

答案 2 :(得分: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是多余的。