使用 for_each 将列表初始化为随机变量
我正在尝试使用 for_each 和 lambda 函数将列表初始化为随机整数。我是 boost.lambda 函数的新手,因此我可能会错误地使用它,但以下代码会生成相同数字的列表。每次我运行它时,数字都不同,但列表中的所有内容都是相同的:
srand(time(0));
theList.resize(MaxListSize);
for_each(theList.begin(), theList.end(), _1 = (rand() % MaxSize));
I'm trying to initialize a list to random integers using a for_each and a lambda function. I'm new to boost.lambda functions so I may be using this incorrectly but the following code is producing a list of the same numbers. Every time I run it the number is different but everything in the list is the same:
srand(time(0));
theList.resize(MaxListSize);
for_each(theList.begin(), theList.end(), _1 = (rand() % MaxSize));
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
Boost lambda 将在函子创建之前评估
rand
。您需要绑定
它,以便在 lambda 求值时对其求值:这按预期工作。
然而,正确的解决方案是使用
generate_n
。为什么要制作一堆 0 来覆盖它们呢?Boost lambda will evaluate
rand
before the functor is made. You need tobind
it, so it's evaluated at lambda evaluation time:This works as expected.
However, the correct solution is to use
generate_n
. Why make a bunch of 0's just to overwrite them?