【问题标题】:QList <int> replace valueQList <int> 替换值
【发布时间】:2017-09-19 03:31:27
【问题描述】:

我有 int 的 QList。

eg: [10,10];

那我想把值减1。

我试过了:

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

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

【问题讨论】:

    标签: qt qlist


    【解决方案1】:

    您不能使用foreach 更改您正在迭代的容器中的值,正如the official documentation 所说:

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

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

    Qt 的 foreach 循环的替代方案是基于范围的 for,即 C++ 11 和更新版本的一部分。但是,请记住,基于范围的 for 可能会强制 Qt 容器分离,而 foreach 不会。 但是使用 foreach 总是复制容器,这通常不是 STL 容器便宜。如果有疑问,请选择 foreach for Qt 容器,以及基于 STL 容器的范围。

    【讨论】:

    • 是的,就是这样。
    【解决方案2】:

    我会在 C++ 11 及更高版本中尝试这个:

    void changeIntVals(QList<int>& valList)
    {
       for(auto& val: valList)
       {
          val -= 1;
       }
    }
    

    附:没试过编译。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-25
      相关资源
      最近更新 更多