我有int的QList。
eg: [10,10];
然后我想将值减少1。
我试过了:
foreach (int val, valList) {
val-= 1;
}
但是,valList的qDebug显示它们的值保持为10.我做错了什么?
答案 0 :(得分:3)
您无法使用foreach
更改正在迭代的容器中的值,因为the official documentation说:
Qt在进入时会自动获取容器的副本 foreach循环。如果您在迭代时修改容器,那就是 不会影响循环。 (如果不修改容器,则复制 仍然发生,但由于隐含共享复制容器 非常快。)
由于foreach使用非const创建容器的副本 变量的引用不允许您修改原始变量 容器。它只会影响副本,这可能不是你的副本 想。
Qt的foreach循环的替代方案是基于范围的 C ++ 11及更新版本的一部分。但是,请记住基于范围 因为可能会迫使Qt容器分离,而foreach则不会。 但是使用foreach总是复制容器,通常不会 便宜的STL容器。如果有疑问,请选择foret for Qt 容器,以及适用于STL的容器。
答案 1 :(得分:2)
我会尝试使用C ++ 11及更高版本:
void changeIntVals(QList<int>& valList)
{
for(auto& val: valList)
{
val -= 1;
}
}
P.S。没试过编译。