C++ 通过常量浮点值生成一系列递增的数字

C++ 通过常量浮点值生成一系列递增的数字,c++,c++11,std,C++,C++11,Std,我知道iota函数,但它只能处理整数值,因为它调用的是++运算符 我想生成递增的浮点数,比如说0.5 [0.5,1,1.5…],然后将它们插入到我的向量中 我提出的最终解决方案是: double last = 0; std::generate(out , out + 10, [&]{ return last += 0.5; }); 哪种类型有效,但我必须使用一个额外的变量。是否有我缺少的std函数,如“D语言”示例中的函数“iota”:aut

我知道iota函数,但它只能处理整数值,因为它调用的是++运算符

我想生成递增的浮点数,比如说0.5 [0.5,1,1.5…],然后将它们插入到我的向量中

我提出的最终解决方案是:

    double last = 0;
    std::generate(out , out + 10, [&]{
        return last += 0.5; 
    }); 
哪种类型有效,但我必须使用一个额外的变量。是否有我缺少的std函数,如“D语言”示例中的函数“iota”:
auto rf=iota(0.0,0.5,0.1)

您可以在
物联网后使用:

iota(begin(a), end(a), 0);    
const auto op = bind(multiplies<double>(), placeholders::_1, .5);
transform(begin(a), end(a), begin(a), op);

<>如果你的编译器支持C++ 2014,你可以写< /p>
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;
也就是说,您可以使用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;
}

那么你想增加向量中的值,还是生成一系列递增的数字?生成一系列递增的数字,我编辑了这个问题,希望它更容易理解。但是如果范围不是1到10,而是像0.0到0.5这样的浮动范围呢。这行得通吗?你什么意思?只要按常量递增,就应该使用lambda而不是bind:
auto op=[](double&a){a*=0.5;}@behzad.nouri我的意思是;假设我的范围是:0.0,0.5,我想增加0.1,所以结果将是0.0,0.1,0.2,0.3,0.4,0.5感谢非常优雅的解决方案,我唯一的问题是vs2012:(非常感谢,我几乎肯定这是最好的方法,但我仍然希望得到更好的提升或std方法。甚至是全球性的(静力学也类似于全局,这就是我不喜欢这个想法的原因)始终使用0初始化,我认为初始化静态变量仍然是个好主意。@Kadir Erdem基本类型的静态变量由编译器初始化为零。此静态变量仅在算法调用中有效,因为它是与lambda相对应的未命名类的静态数据成员。我只是要求所以,void foo(){static int i)和[](){static int i};是不同的。您知道关于“未命名类的静态数据成员”的链接吗Kadir Erdem Demir?我想你应该从ISO站点下载C++标准的工作草案。lambda表达式不是函数。它们是函数对象,它们被定义为未命名类。
0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
#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