Как хранить объекты с разными типами данных в одном векторе

0

Я полностью смущен тем, как я могу хранить объекты с разными типами данных в одном векторе. Например, у меня есть Class1 с некоторыми указанными данными и Class2 с другим. Мне нужно поместить их в вектор в том порядке, в котором они созданы. Можно ли это сделать?

  • 4
    Вектор может хранить только элементы одного типа. Если у вас есть классы, наследуемые от одного базового класса, вы можете хранить указатели на базовый класс, но я думаю, что это не то, что вы пытаетесь сделать
  • 0
    @IvayloStrandjev да, вот почему я в замешательстве
Показать ещё 2 комментария
Теги:
vector
stl

1 ответ

3
Лучший ответ

Вот несколько альтернатив.

Если разные типы данных, которые вы хотите сохранить, являются типами POD, вы можете создать объединение для их хранения.

union u {
    int intvalue;
    double double value;
}

vector<u> vec;

Вы также можете хранить указатели на экземпляры разрозненных типов через объединение.

Недостатком таких объединений является то, что вам нужно каким-то образом узнать, какой тип фактически хранится в каждом экземпляре.

Или, если вы хотите хранить объекты, вы можете упорядочить объекты для всех наследуемых от общего базового класса, а затем выделять экземпляры вашего класса в кучи и хранить указатели на экземпляры в векторе. В зависимости от того, как ваши объекты будут использоваться, вам нужно будет указать указатели и/или использовать виртуальные методы для вызова методов на объектах.

class base {
...
}

class d1 : base {
...
}

vector<base*> vec;

vec.push_back((base*)new d1());

Или вы можете использовать boost.variant. Это, возможно, лучший способ, потому что он является типичным по сравнению с другими методами, о которых я упоминал.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню