c++ - 如何在一个 vector 中存储具有不同数据类型的对象

标签 c++ vector stl

我对在一个 vector 中存储具有不同数据类型的对象的方式感到非常困惑。 例如,我有一些指定数据的 Class1 和另一个数据的 Class2。我需要按照它们的创建顺序将它们放入 vector 中。有可能做到吗?

最佳答案

这里有一些选择。

如果你要存储的不同数据类型是POD类型,你可以创建一个union来存储它们。

union u {
    int intvalue;
    double double value;
}

vector<u> vec;

您还可以通过 union 存储指向不同类型实例的指针。

像这样使用 union 的一个缺点是您需要某种方式来了解每个实例中实际存储的是什么类型。

或者如果你想存储对象,你可以安排你的对象都继承自一个公共(public)基类,然后在堆上分配你的类的实例并将指向实例的指针存储在 vector 中。根据您的对象的使用方式,您将不得不转换指针和/或使用虚拟方法来调用对象上的方法。

class base {
...
}

class d1 : base {
...
}

vector<base*> vec;

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

或者您可以使用 boost.variant .这可以说是最好的方法,因为与我提到的其他方法相比,它是类型安全的。

关于c++ - 如何在一个 vector 中存储具有不同数据类型的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22091339/

相关文章:

c++ - 如何将数字乘数分配给 or-tools (C++) 中的变量

c++ - 错误 C2259 : "Derived" cannot instantiate abstract class

c++ - 如何更改要反转的 std::map 的顺序?

c++ - VC/C++裸属性有什么作用?

c++ - 更新对存储在 C++ vector 中的对象的引用

Haskell 嵌套向量并行策略

c++ - 字符串和 unordered_map 运行缓慢

c++ - 保留容量会导致两次分配还是一次分配?

c++ - 为什么 llvm::SmallVector 拆分它的存储?

c++ - 如何为我的模板类添加 std::swap?