是否有 Qt C++ 数据容器可用于动态大小结构?
Is there a Qt C++ data container to use in dynamic size structs?
我认为这个问题应该由社区来识别和解决,但似乎我使用了错误的关键字进行搜索,或者它真的难以捉摸。
问题很简单。我想定义一个结构,其中应该定义一个动态数据容器(向量、列表、队列,无论什么工作)。
#pragma pack(1)
struct Example
{
int foo;
QVector<int> bar;
};
我需要向此 Vector(或采用任何其他 Qt/STL 容器)插入整数值,并且我想将此结构的内容复制到字节数组,以便将其原始数据写入文件。
我遇到的是,当我写下面的代码时:
Example exstr;
qDebug()<<sizeof(exstr);
exstr.bar.push_back(12);
exstr.bar.push_back(5);
qDebug()<<sizeof(exstr);
它显示值:
8
8
现在,这可能是因为 QVector 只是一个指向连续数据的普通指针,但我需要的是一个可动态调整大小的数据容器(它也会调整它所在的结构的大小)并允许我使用内容当我尝试序列化它时逐字节。
提前感谢您的帮助。
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;
//...
您使用 QVector 的方向正确。 STL 向量 class 也可以使用。这两个 classes 都保证将它们的值存储在连续的内存中。
对于 QVector,您需要这样的东西:
memcpy (dest, bar.data(), bar.count () * sizeof (int));
对于 STL 向量,您获取第一个元素的地址:
memcpy (dest, &bar[0], bar.size () * sizeof (int));
在这两种情况下,"dest" 必须足够大以容纳您正在复制的数据。我在这里以复制为例;如果您只需要一个指向数据的指针,那么 QVector::data 提供,对于 STL 向量,第一个元素的地址提供它。
我认为这个问题应该由社区来识别和解决,但似乎我使用了错误的关键字进行搜索,或者它真的难以捉摸。
问题很简单。我想定义一个结构,其中应该定义一个动态数据容器(向量、列表、队列,无论什么工作)。
#pragma pack(1)
struct Example
{
int foo;
QVector<int> bar;
};
我需要向此 Vector(或采用任何其他 Qt/STL 容器)插入整数值,并且我想将此结构的内容复制到字节数组,以便将其原始数据写入文件。
我遇到的是,当我写下面的代码时:
Example exstr;
qDebug()<<sizeof(exstr);
exstr.bar.push_back(12);
exstr.bar.push_back(5);
qDebug()<<sizeof(exstr);
它显示值:
8
8
现在,这可能是因为 QVector 只是一个指向连续数据的普通指针,但我需要的是一个可动态调整大小的数据容器(它也会调整它所在的结构的大小)并允许我使用内容当我尝试序列化它时逐字节。
提前感谢您的帮助。
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;
//...
您使用 QVector 的方向正确。 STL 向量 class 也可以使用。这两个 classes 都保证将它们的值存储在连续的内存中。
对于 QVector,您需要这样的东西:
memcpy (dest, bar.data(), bar.count () * sizeof (int));
对于 STL 向量,您获取第一个元素的地址:
memcpy (dest, &bar[0], bar.size () * sizeof (int));
在这两种情况下,"dest" 必须足够大以容纳您正在复制的数据。我在这里以复制为例;如果您只需要一个指向数据的指针,那么 QVector::data 提供,对于 STL 向量,第一个元素的地址提供它。