gpt4 book ai didi

c++ - QVector size() 返回大小为零

转载 作者:太空宇宙 更新时间:2023-11-04 15:51:34 25 4
gpt4 key购买 nike

这两个函数是我尝试序列化 QVector。不幸的是,我不能使用 QDataStream,因为我的老板要求实现是独立于 Qt 的,并且 QDataStream 预置了一个标题。所以问题是函数 binToVector 返回的 vector 返回的大小等于 0,但如果打印元素,则它们等于原始 vector 。如果 vector 的元素等于原始元素,为什么返回的大小为零?这些序列化函数可以吗?我不能使用 boost 和 Qt 函数来实现它,只能使用 C++;

QByteArray vectorToBin(const QVector<qint32> & vec)
{
QByteArray result;
foreach(quint32 e, vec) {
char *src = reinterpret_cast<char*>(&e);
result.append(src, sizeof(qint32));
}
return result;
}

QVector<qint32> binToVector(const QByteArray & bytes)
{
int size = sizeof(qint32);
QVector<qint32> result;
result.reserve(bytes.count()/size);
int j=0;
for(int i=0; i<bytes.count(); i+=size) {
memcpy(&result[j++], bytes.constData()+i, size);
}
return result;
}

最佳答案

您正在调用 QVector::reserve ,它为类分配内存以用作存储,但实际上并不更改容器中真实 元素的数量。为此,您需要 QVector::resize .标准 C++ vector 类的工作方式相同。提前预留空间可确保以后重复调用 append 时不必一直重新分配容器的存储空间。

关于c++ - QVector size() 返回大小为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7421497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com