如何创建一个包含三种不同类型矢量的矢量

Max*_*hke -1 c++ vector c++11

我有三个结构(Foo,Bar,Fruit),我想要一个向量来保存每个结构vector<Foo> Foo_holder; vector<Bar> Bar_holder; vector<Fruit> Fruit holder;,然后我想尝试将所有这三个向量放入一个向量中.所以它应该像这样结束,Vector_holder作为我希望知道如何创建的顶级向量:

Vector_holder

--- Foo_Holder
------Instance of Foo

--- Bar_holder
------Instance of Bar

--- Fruit_holder
------Instance of Fruit
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?

可能的重复问题列出了一个问题,即向量必须是相同的大小或代码中断,并且我的问题中的向量将大量移动大小.我也觉得这对初学者C++学习者比其他问题更有帮助.我在这里找到的解决方案对我有用,并且总体上比近篇文章的长答案简单得多.我更像是C++的初学者,因此在这里欣赏更容易理解的答案.

lub*_*bgr 7

每当这样的分组有意义时,我倾向于把它放入一个struct并因此命名它.在这种情况下,

struct FooBarFruitHolder {
    std::vector<Foo> foos;
    std::vector<Bar> bars;
    std::vector<Fruit> fruits;
};
Run Code Online (Sandbox Code Playgroud)

你可以用它作为

std::vector<FooBarFruitHolder> vec;

vec.emplace_back();
Run Code Online (Sandbox Code Playgroud)

并且例如用对象填充它:

/* Add a Foo element to all FooBarFruitHolder instances. */
for (auto&& fooBarFruitHolder : vec)
    fooBarFruitHolder.foos.emplace_back(/* Arguments passed to Foo ctor */);
Run Code Online (Sandbox Code Playgroud)

命名在这里是必不可少的,因此请选择最适合您应用的内容.将此嵌套数据结构的一部分传递给设置成员变量的函数时,初始化也可能更容易阅读,例如

void initialize(std::vector<Foo>& foos)
{
    foos.emplace_back(/* Arguments for first Foo object */);
    foos.emplace_back(/* Arguments for second Foo object */);
}

initialize(vec.front().foos);
Run Code Online (Sandbox Code Playgroud)