【问题标题】:Using generate to fill list in template class c++使用生成填充模板类c ++中的列表
【发布时间】:2018-05-08 21:00:52
【问题描述】:

我正在做一个项目,我有一个模板类,其中有一个列表。我包含的这个函数旨在用随机数填充列表。但是每次我运行它时,它都会说“术语不会评估为带 0 个参数的函数”,而我的理解是我不能使用在 Generate 中返回值的函数。

如何使生成器和随机函数成为函子?没有它有没有办法做到这一点?

template<typename T>
void ListManipulator<T>::fillList()
{
    std::uniform_real_distribution<double> random(1000, 2000);
    std::default_random_engine generator(static_cast<unsigned>(std::time(0)));

    std::generate(theList.begin(), theList.end(), random(generator));

【问题讨论】:

  • 算法很酷,除了for(auto&amp; e : theList) e = random(generator); 之外的所有算法都一样长且易于阅读。

标签: c++ templates generate


【解决方案1】:

尝试以下方法:

std::uniform_real_distribution<double> random(1000, 2000);
std::default_random_engine generator(static_cast<unsigned>(std::time(0)));

std::generate(theList.begin(), theList.end(), 
    [&random, &generator]{ return random(generator); });

std::generate 需要一个生成器,它是一个带有签名的函数:

Ret fun();

而且你提供的根本不是一个函数,而是一个double 值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    • 2017-06-26
    • 2019-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多