【问题标题】:How do I pass standard generators to STL functions?如何将标准生成器传递给 STL 函数?
【发布时间】:2014-11-19 12:47:30
【问题描述】:
#include <random>
#include <algorithm>
#include <vector>

int main() {
    std::vector < int > a = {1, 2, 3};
    std::mt19937 generator;
    std::random_shuffle(a.begin(), a.end(), generator);
}

我正在尝试使用 g++ -std=c++0x 编译此代码,收到一个以

结尾的巨大编译器转储
/usr/include/c++/4.9.2/bits/random.h:546:7: note:   candidate expects 0 arguments, 1 provided

有什么正确的方法吗?

【问题讨论】:

  • 谢谢,工作就像一个魅力。您能否将其发布为答案以便我接受?
  • 您可以使用包装函数或 lambda; RandomFunc 参数期望的东西本身将采用参数n,并且 C++11 随机数工具都将它们的范围参数烘焙到它们的实例中。但当然,克里斯的回答是最好的。

标签: c++ stl


【解决方案1】:

您尝试使用的std::random_shuffle 的重载需要一个“RandomFunc”:

如果作为 r(n) 调用,则函数对象在 [0,n) 区间内返回一个随机选择的可转换为 std::iterator_traits&lt;RandomIt&gt;::difference_type 类型的值

在 C++14 中,std::random_shuffle 被弃用,取而代之的是 std::shuffle,它采用生成器而不是“RandomFunc”。只需将函数更改为std::shuffle

【讨论】:

猜你喜欢
  • 2014-09-23
  • 2017-05-07
  • 2020-09-28
  • 2017-08-12
  • 2019-03-03
  • 2015-08-01
  • 2023-03-14
相关资源
最近更新 更多