修改作为指针传递的 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 上是五个 int
s 和一个 long
,无论 QVector
的内容类型或如何它包含许多项目)。有关更多信息,请参阅Qt docs on Implicit Sharing :)
非常感谢!我会改变它,因为你更喜欢非指针方法以上是关于修改作为指针传递的 QVector 的 QVector的主要内容,如果未能解决你的问题,请参考以下文章