修改作为指针传递的 QVector 的 QVector

Posted

技术标签:

【中文标题】修改作为指针传递的 QVector 的 QVector【英文标题】:Modifying a QVector of QVectors passed as a pointer 【发布时间】:2011-11-18 11:57:30 【问题描述】:

我在函数的参数中有一个变量,定义如下:

QVector< QVector<qreal> > *var;

在代码的某个点我想这样做:

*var[i][j] = some_value.

然而这并不能编译,因为

错误:'*(var + ((long unsigned int)(((long unsigned int)row) * 8ul)))->QVector::operator[] 与 T = QVector 中的 'operator*' 不匹配'

如何正确引用该值以便对其进行修改? (思路是真的修改了函数中传入的参数。)

【问题讨论】:

【参考方案1】:

你需要把*var放在括号里:

(*var)[i][j] = some_value;

虽然您为什么使用指向QVector 的指针?由于QVector 是Qt 通用容器系列的一部分,它使用隐式共享。这意味着如果您改为按值传递,则只会执行浅拷贝,也就是说,您实际上只会传递数据结构的薄簿记部分 - 指向更大块的指针存在于其他地方的数据。

【讨论】:

我不知道。我想避免的是复制整个结构,并且在返回时必须再次复制整个结构。如果我按值传递,那么整个副本还没有完成?谢谢! 不,按值传递仅复制 QVector 的“簿记”数据(在 Windows 上是五个 ints 和一个 long,无论 QVector 的内容类型或如何它包含许多项目)。有关更多信息,请参阅Qt docs on Implicit Sharing :) 非常感谢!我会改变它,因为你更喜欢非指针方法

以上是关于修改作为指针传递的 QVector 的 QVector的主要内容,如果未能解决你的问题,请参考以下文章

如何将 QVector3D 与 QMatrix3x3 相乘?

Qt6STL-QVector循环删除指针浅谈

QVector内存泄漏?

内存对齐 QVector().data()

指针和 QVector 问题

如何实例化并附加到指向我的对象的指针的 QVector