QList <int>替换值

时间:2017-09-19 03:31:28

标签: qt qlist

我有int的QList。

eg: [10,10];

然后我想将值减少1。

我试过了:

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

但是,valList的qDebug显示它们的值保持为10.我做错了什么?

2 个答案:

答案 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。没试过编译。