[英]Is there a more efficient way for storing vector<vector<string>> ? C++
[英]How efficient is storing data within an object in a vector in C++?
我正在制作一个小型虚拟机; 在我的虚拟机中,我从二进制文件中读取指令。 每条指令的大小为1个字节。 VM启动时,它将二进制文件加载到向量中。 然后,使用开关和for循环执行指令。
但是,这是我的问题开始的地方。 我有一个称为“堆栈”的向量; 这是我正在运行的程序的虚拟机堆栈。 问题是我想在向量中存储不同种类的数据(有符号和无符号整数,字符串等)。
为此,我创建了自己的对象(robj),并创建了类型为“ robj”的向量。 这使我可以存储所需的数据类型,但是我的问题是:这很浪费吗?
这是我的对象的实现:
class robj {
public:
int signed_int = 0;
unsigned int unsigned_int = 0;
};
如您所见,我的对象目前确实很小,但是当我添加字符串之类的对象时,它会变得更大。 我认为浪费的部分是,如果我将有符号整数存储在堆栈中,我还必须存储无符号整数,因为该对象定义了两种类型的整数。 随着我把对象变大,这个问题只会变得更糟。
因此,我想知道,是否有一种不那么浪费的方法?
这就是Boost.Variant的目的。 它实现了有区别的工会,因此您不必:
std::vector<boost::variant<
int,
unsigned int
>> v;
可以有2个解决方案
union robj { int signed_int; unsigned int unsigned int; };
class type_base { type_data my_type; public: type_base(const type_data &t) : my_type(t) {} virtual parse_data() = 0; virtual serialize_data() = 0; virtual type_data get_type() { return my_type; } virtual type_base *clone() = 0; }; class signed_int : public type_base { public: int signed_int; };
您还可以在模板从type_base继承的地方对类型进行模板化。
确保永远不要创建会导致对象切片的type_base向量。 感谢Alain的评论
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.