QVector size()返回大小为零

时间:2011-09-14 18:54:23

标签: c++ qt serialization

这两个函数是我尝试序列化QVector。不幸的是,我不能使用QDataStream,因为我的老板要求实现是Qt独立的,而QDataStream会预先设置一个头。所以问题是函数binToVector返回的向量返回的大小等于0,但是如果元素被打印,则它们等于原始向量。如果向量的元素等于原始元素,为什么返回的大小为零?这些序列化功能还可以吗?我不能使用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;
}

1 个答案:

答案 0 :(得分:6)

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