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;
}