是否有一个Qt C ++数据容器用于动态大小结构?

时间:2016-12-14 12:56:55

标签: c++ qt struct sizeof

我认为这个问题应该由社区来识别和解决,但似乎我用错误的关键词进行搜索,或者它真的难以捉摸。

问题很简单。我想定义一个结构,其中应该定义动态数据容器(Vector,List,Queue,无论什么工作)。

Example exstr;
qDebug()<<sizeof(exstr);
exstr.bar.push_back(12);
exstr.bar.push_back(5);
qDebug()<<sizeof(exstr);

我需要将整数值插入此Vector(或采用任何其他Qt / STL容器),我想将此结构的内容复制到字节数组,以便将其原始数据写入文件。 / p>

我遇到的是当我编写以下代码时:

8
8

显示值:

'django.contrib.admin'

现在,这可能是因为QVector只是一个指向连续数据的普通指针,但我需要的是一个动态可调整大小的数据容器(它也可以调整其所在的结构大小)并允许我使用我尝试序列化时,逐字节的内容。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

QDataStream 允许您序列化一些Qt数据类型:Serializing Qt Data Types

QDataStream stream(&file);   // we will serialize the data into the file
stream << your_qvector_obj;
//...
QVector<int> new_vec;
stream >> new_vec;
//...

答案 1 :(得分:0)

您与QVector一起走在正确的轨道上。 STL矢量类也可以工作。这两个类都保证将它们的值存储在连续的内存中。

对于QVector,你需要这样的东西:

memcpy (dest, bar.data(), bar.count () * sizeof (int));

对于STL向量,您获取第一个元素的地址:

memcpy (dest, &bar[0], bar.size () * sizeof (int));

在这两种情况下,&#34; dest&#34;必须足够大才能保存您正在复制的数据。我在这里使用复制作为例子;如果你只需要一个指向数据的指针,那么QVector :: data提供了对于STL向量,第一个元素的地址提供它。