【问题标题】:std::move with three parameters - iterator passed by copy带有三个参数的 std::move - 复制传递的迭代器
【发布时间】:2016-05-01 15:40:33
【问题描述】:

我正在使用以下 std::move 语法:

std::move(values.begin(), values.end(), dest);

dest是前向输出迭代器,目标容器在dest之后至少有values.size()

问题是,我在一个循环中多次调用它,但 dest 似乎是通过副本传递的,因此 dest 指向的项目每次都被覆盖,而不是被附加。

  1. 此语法的文档在哪里?我在 cppreference 上只能找到单参数版本。
  2. 有没有办法通过引用传递dest迭代器,或者将其结果作为返回值,以避免在循环中多次调用上述函数时出现“覆盖”行为?

我知道我每次都可以使用dest += values.size();,但这是为了更好地了解...

谢谢

【问题讨论】:

  • 你可能想要dest = std::move(values.begin(), values.end(), dest);
  • 寻找算法中的那个:en.cppreference.com/w/cpp/algorithm/move(注意底部有一个交叉链接可以在算法移动和实用程序之间切换i> 移动)

标签: c++ iterator containers move


【解决方案1】:

dest 迭代器从移动算法返回。您可以使用:

dest = std::move(values.begin(), values.end(), dest);

这里是这个算法的链接:std::move (algorithm)

【讨论】:

    【解决方案2】:
    std::move(values.begin(), values.end(), std::back_inserter(dest));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-21
      • 1970-01-01
      • 2019-09-26
      • 2015-07-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多