qt - 使用 double* 设置 QVector 数据,无需内存复制
问题描述
我有一个结构MyVect,我希望将我的结构MyVect转换为 QVector 变量,而不复制内存。
我想使用已经初始化的 QVector 保留的相同内存。
typedef struct MyVect
{
int size;
double *data;
}vect;
类似的东西
QVector<double> v;
MyVect *vect = new MyVect;
double *val = new double(4);
for(int i =0; i <4; i++)
{
val[i] = i;
}
vect->size = 4;
vect->data = val;
v.data() = vect->data;// <==example not correct
提前感谢您的帮助
解决方案
什么不起作用 - 解释
您尝试做的事情是不可能的,即QVector
不提供setData
传入普通 C++ 双精度数组 (double *) 的方法。
v.data() = vect->data;
不起作用,因为v.data()
不返回对其内部 C++ 双数组 (double *) 的引用。
一个解法
可能的解决方案是让 QVector 分配内存并将其传递给您的MyVect
结构。
QVector<double> v;
v.resize(4); // Let Qt allocate the C++ double array (double*)
// Initialise your MyVect structure based on the QVector.
MyVect *vect = new MyVect;
vect->data = v.data();
vect->size = v.size();
// Fill the vector using your MyVect struct.
for(int i =0; i < vest->size; i++)
{
vect->data[i] = i;
}
推荐阅读
- javascript - nodejs中的api请求连接问题
- android - 是否可以使用 Google / Android Pay 以外的支付平台(订阅)?
- c - 在函数中使用 scanf 传递字符串变量
- python - 尝试中的奇怪行为..除了
- java - 使用 apache httpclient 接收“SLF4J”日志消息
- typescript - 从仅定义一个选项的多个选项中为变量赋值
- c++ - /usr/include/stdlib.h:133:35:错误:在标记“(”之前缺少二元运算符
- javascript - Three.js 使用 Raycaster 检测 ArrowHelper 的线和锥子项
- snowflake-cloud-data-platform - 自动增量增长速度快于行数?
- asp.net-core - 如何处理 ASP.NET Core 操作中的未知参数