qvector倒序插入
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了qvector倒序插入相关的知识,希望对你有一定的参考价值。
您好,QVector是Qt框架中提供的一个动态数组容器,可以在运行时动态地增加或删除元素。在QVector中,可以通过使用insert()函数在指定位置插入元素。要在QVector中倒序插入元素,可以按照以下步骤进行:1. 创建一个QVector对象,例如:
QVector<int> myVector;
2. 将要插入的元素添加到一个临时的QVector对象中,例如:
QVector<int> tempVector;
tempVector << 1 << 2 << 3;
3. 使用std::reverse()函数将临时QVector对象中的元素倒序排列,例如:
std::reverse(tempVector.begin(), tempVector.end());
4. 使用QVector的insert()函数将倒序排列的元素插入到QVector对象中,例如:
for(int i=0; i<tempVector.size(); i++)
myVector.insert(i, tempVector.at(i));
这样,就可以将倒序排列的元素插入到QVector对象中了。需要注意的是,在插入元素时,需要将元素插入到正确的位置,否则可能会导致元素的顺序错误。 参考技术A 1 可以通过qvector的insert()函数实现倒序插入。
2 insert()函数可以在指定位置插入一个元素,因此可以利用循环将元素从末尾开始插入。
3 代码示例:QVector<int> vec;
for(int i = n-1; i >= 0; i--)
vec.insert(0, arr[i]);
其中,n为数组arr的长度,arr为待插入的数组。
通过循环将arr从末尾开始插入到vec的开头,即实现了倒序插入。
修改作为指针传递的 QVector 的 QVector
【中文标题】修改作为指针传递的 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倒序插入的主要内容,如果未能解决你的问题,请参考以下文章