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 上是五个 ints 和一个 long,无论 QVector 的内容类型或如何它包含许多项目)。有关更多信息,请参阅Qt docs on Implicit Sharing :) 非常感谢!我会改变它,因为你更喜欢非指针方法

以上是关于qvector倒序插入的主要内容,如果未能解决你的问题,请参考以下文章

在 QVector 插入函数后无法访问的点

Qt6-QVector分析

编辑 QVector

QList和QVector等容器的区别:

“QVector<QVector<QVector<T>>> 向量”是啥意思?

如何从 QVector<QVector<T>> 获取 QVector<T>?