代码之家  ›  专栏  ›  技术社区  ›  0xbadf00d

从转换的容器元素创建离散分布

  •  3
  • 0xbadf00d  · 技术社区  · 6 年前

    假设我们有一个 std::vector<T> v T U T::f() const ,在哪里 U double . 我想创建一个 std::discrete_distribution<> d(/* v[0].f(), ..., v[v.size() - 1].f() */) . 在不创建包含这些值的新容器的情况下,这是可能的吗 v[0].f(), ..., v[v.size() - 1].f()

    2 回复  |  直到 6 年前
        1
  •  2
  •   Jarod42    6 年前

    像这样的 boost::transform_iterator 我能做到。您只需要从向量的迭代器中创建它们。

        2
  •  1
  •   Jarod42    6 年前

    operator double T 那你就可以得到回报了 f() std::discrete_distribution

    struct Foo
    {
        operator double() const { return f(); }
        double f() const { return 1.0; }
    };
    
    int main()
    {
        std::vector<Foo> foo(10);
        std::discrete_distribution dd{foo.begin(), foo.end()};
    }