假设我们有一个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()
的新容器的情况下实现?
答案 0 :(得分:2)
boost::transform_iterator
之类的东西可以做到。您只需要从向量的迭代器创建它们即可。
答案 1 :(得分:1)
如果您可以将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()};
}