我知道iota函数,但它只是工作整数值,因为它调用++运算符。
我想通过让0.5比较来生成增加的浮点数 [0.5,1,1.5 ....],并将它们插入我的载体
我想出的最终解决方案是:
double last = 0;
std::generate(out , out + 10, [&]{
return last += 0.5;
});
哪种工作但我必须使用额外的变量。是否存在我失踪的标准功能,如“D语言”示例中的“iota”功能:auto rf = iota(0.0, 0.5, 0.1);
答案 0 :(得分:3)
如果编译器支持C ++ 2014,则可以编写
double a[10];
std::generate( a, a + 10,
[step = 0.0] () mutable { return step += 0.5; } );
for ( double x : a ) std::cout << x << ' ';
std::cout << std::endl;
输出
0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
那就是你可以使用init捕获而不在定义lambda的范围内声明一个额外的变量。
否则,您可以在lambda表达式中声明一个静态变量。例如
#include <iostream>
#include <algorithm>
int main()
{
double a[10];
std::generate( a, a + 10,
[] () mutable ->double { static double value; return value += 0.5; } );
for ( double x : a ) std::cout << x << ' ';
std::cout << std::endl;
return 0;
}
输出将是相同的
0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
答案 1 :(得分:2)
您可以在iota
之后使用transform
:
iota(begin(a), end(a), 0);
const auto op = bind(multiplies<double>(), placeholders::_1, .5);
transform(begin(a), end(a), begin(a), op);
transform(boost::counting_iterator<int>(0),
boost::counting_iterator<int>(n),
begin(a),
bind(multiplies<double>(), placeholders::_1, .5));