QVector size()返回大小为0
QVector size() returning size zero
这两个函数是我试图序列化一个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;
}
您正在调用QVector::reserve
,它为类分配内存用作存储,但实际上并不改变容器中实际元素的数量。为此,你需要QVector::resize
。标准的c++ vector
类以同样的方式工作。提前预留空间可以确保以后对append
的重复调用不必一直重新分配容器的存储空间。
相关文章:
- 将参数的省略复制为返回值
- QT-如何通过按下按钮从子窗口小部件返回到父窗口小部件
- 如何为返回特定类型的函数创建 SWIG 类型图
- 将 void 函数更改为返回值函数
- 为返回的临时人员复制 Elision
- 如何为返回枚举元组的 C++ 函数编写 cython 包装器?
- 为返回一对的对创建模板类
- tellg() 只对小文件返回 -1
- 现代编译器优化如何将递归转换为返回常数
- 搜索一组点,其长度总和最小为矩形.算法是什么
- Perl xs - 无法从方法调用返回新的自定义 C++ 对象 - 改为返回标量值
- 将私有结构设置为返回值
- 如何使用 boost::bind 将返回 int 的函数转换为返回布尔值的函数
- 当父类共享指针为返回类型时返回新的基类
- 我需要为返回容器副本的函数添加锁吗
- 将右值指定为返回值时出现分段错误
- Python和C++为-1/2返回不同的值
- f() 如何在给定程序中工作,标题为返回引用
- 为返回 void 的函数声明 constexpr 的任何理由
- C++将字符串转换为 wstring 并使用最小代码返回