Qt QList<;int>;替换值

Qt QList<;int>;替换值,qt,qlist,Qt,Qlist,我有一个int的QList eg: [10,10]; 然后我想把这个值减少1 我试过: foreach (int val, valList) { val-= 1; } 但valList的qDebug显示它们的值仍然为10。我做错了什么?您不能使用foreach来更改您正在迭代的容器中的值,如下所示: 当容器进入一个容器时,Qt自动获取该容器的副本 foreach循环。如果在迭代时修改容器,则 不会影响循环。(如果不修改容器,则复制 仍然会发生,但由于隐式共享复制容器 速度非常快。)

我有一个int的QList

eg: [10,10];
然后我想把这个值减少1

我试过:

foreach (int val, valList) {
    val-= 1;
}

但valList的qDebug显示它们的值仍然为10。我做错了什么?

您不能使用
foreach
来更改您正在迭代的容器中的值,如下所示:

当容器进入一个容器时,Qt自动获取该容器的副本 foreach循环。如果在迭代时修改容器,则 不会影响循环。(如果不修改容器,则复制 仍然会发生,但由于隐式共享复制容器 速度非常快。)

因为foreach使用非常量创建容器的副本 变量的引用不允许修改原始变量 容器。它只影响副本,而副本可能不是您想要的 需要

Qt的foreach循环的另一种选择是基于范围的 C++ 11的一部分,更新。但是,请记住,范围是基于 for可能会强制Qt容器分离,而foreach则不会。 但是使用foreach总是复制容器,这通常是不正确的 便宜的STL集装箱。如果有疑问,请选择foreach for Qt 容器,以及基于范围的STL容器


您不能使用
foreach
来更改正在迭代的容器中的值,如下所示:

当容器进入一个容器时,Qt自动获取该容器的副本 foreach循环。如果在迭代时修改容器,则 不会影响循环。(如果不修改容器,则复制 仍然会发生,但由于隐式共享复制容器 速度非常快。)

因为foreach使用非常量创建容器的副本 变量的引用不允许修改原始变量 容器。它只影响副本,而副本可能不是您想要的 需要

Qt的foreach循环的另一种选择是基于范围的 C++ 11的一部分,更新。但是,请记住,范围是基于 for可能会强制Qt容器分离,而foreach则不会。 但是使用foreach总是复制容器,这通常是不正确的 便宜的STL集装箱。如果有疑问,请选择foreach for Qt 容器,以及基于范围的STL容器


我会用C++ 11和以后的:
void changeIntVals(QList<int>& valList)
{
   for(auto& val: valList)
   {
      val -= 1;
   }
}
void changeIntVals(QList和valList)
{
用于(自动和val:valList)
{
val-=1;
}
}

S.没有尝试编译。

< P>我将用C++ 11和以后:

尝试这个。
void changeIntVals(QList<int>& valList)
{
   for(auto& val: valList)
   {
      val -= 1;
   }
}
void changeIntVals(QList和valList)
{
用于(自动和val:valList)
{
val-=1;
}
}

p.S.没有尝试编译。

是的,这是一条路。是的,这是一条路。