在普通for循环中更改QVector的对象
Change object of a QVector in an ordinary for loop
如果我有一个QVector,我可以使用基于范围的循环,使用引用并更改QVector中的对象。
但是在修改对象时需要索引的情况下,我必须使用普通的for循环。但是我怎样才能改变QVector中对象的值呢?
作为解决方法,我在更改临时对象后使用了replace方法,但这有点难看。
这是代码:
struct Resource {
int value = 0;
};
int main(int argc, char *argv[])
{
QVector<Resource> vector{Resource{}, Resource{}, Resource{}};
qDebug() << vector.at(0).value
<< vector.at(1).value
<< vector.at(2).value;
for(Resource &res : vector)
res.value = 1;
qDebug() << vector.at(0).value
<< vector.at(1).value
<< vector.at(2).value;
for(int i = 0; i < vector.size(); ++i) {
//Resource &res = vector.at(i); <-- won't compile: cannot convert from 'const Resource' to 'Resource &'
Resource &res = vector.value(i); //Compiles, but creates temporary Object and doesn't change the original object
res.value = i;
//vector.replace(res); <-- Workaround
}
qDebug() << vector.at(0).value
<< vector.at(1).value
<< vector.at(2).value;
}
使用数组下标操作符,[]
.
Resource &res = vector[i];
或者您可以丢弃引用变量并直接访问:
vector[i].value = i;
该操作符返回指定索引处对象的非const引用。
您可以使用T & QVector::operator[](int i)
,因为它返回索引位置i
的项作为可修改的引用。但是你现在使用的是const T & QVector::at(int i) const
(即在两种情况下,你都有一个参考,但在operator[]
的情况下,它不是常量)。
那么,你可以这样做:
for(int i = 0; i < vector.size(); ++i)
vector[i].value = i;
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 将 Qvector<uint8_t> 转换为 QString
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 代理对象的常量正确性
- 将指针的QVECTOR分类到自定义对象
- 使用迭代器构建 QVector 对象
- 我应该怎么做才能使用自定义类对象的 QVector 将信号发送到插槽
- 如何实例化并附加到指向我的对象的指针的QVector
- 在普通for循环中更改QVector的对象
- QVector与自定义对象有参数
- 如何将由类的对象组成的QVector的数据写入文件?
- 要在列表上显示的对象的QVector(Widget或Model)
- QVector::remove(int i, int count)从第一个对象移除时的性能