C++ 如何在C++;

C++ 如何在C++;,c++,arrays,matlab,C++,Arrays,Matlab,我已经习惯于使用Python或Matlab,在这里我可以创建如下列表: min = 5; step = 2; max = 16; Range = min:step:max; 范围将是列表[5,7,9,11,13,15] 是否有一个等价的简单方法来生成一个列表,比如C++中的“范围”?到目前为止,我能想到的最简单的事情是使用for循环,但这相对来说相当乏味。您必须自己实现它,比如: std::vector<int> createArray( int min, int max, int

我已经习惯于使用Python或Matlab,在这里我可以创建如下列表:

min = 5;
step = 2;
max = 16;
Range = min:step:max;
范围将是列表[5,7,9,11,13,15]


<>是否有一个等价的简单方法来生成一个列表,比如C++中的“范围”?到目前为止,我能想到的最简单的事情是使用for循环,但这相对来说相当乏味。

您必须自己实现它,比如:

std::vector<int> createArray( int min, int max, int step )
{
    std::vector<int> array;
    for( int i = min; i < max; i += step )
    {
        array.push_back( i );
    }
    return array;
}
std::vector<int> numbers;
stdx::iota_n(std::back_inserter(numbers), 6, 5, 2);
std::vector createArray(int-min、int-max、int-step)
{
std::矢量阵列;
对于(int i=min;i
C++在语言或标准库中都没有提供这样的功能。我将编写一个函数模板,使其看起来(大致)像标准库中的某些东西,顺序如下:

namespace stdx {
    template <class FwdIt, class T>
    void iota_n(FwdIt b, size_t count, T val = T(), T step = T(1)) {
        for (; count; --count, ++b, val += step)
            *b = val;
    }
}
名称空间stdx{
模板
无效iota_n(FwdIt b,size_t count,t val=t(),t step=t(1)){
对于(;count;--count,++b,val+=step)
*b=val;
}
}
从那里看起来像这样:

std::vector<int> createArray( int min, int max, int step )
{
    std::vector<int> array;
    for( int i = min; i < max; i += step )
    {
        array.push_back( i );
    }
    return array;
}
std::vector<int> numbers;
stdx::iota_n(std::back_inserter(numbers), 6, 5, 2);
std::向量数;
stdx::物联网(std::背面插入器(数字),6、5、2);

< /代码>

在C++中没有这样的预定义方法。 下面的代码可能对您有所帮助

std::vector<int> createArrayRange( int min, int max, int step )
{
    std::vector<int> array;
    for( int i = min; i < max; i += step )
    {
        array.push_back(i);
    }
    return array
}
std::vector createArrayRange(最小整数、最大整数、步长整数)
{
std::矢量阵列;
对于(int i=min;i
或者这会相对更快

void createArrayRange( std::vector<int>& array, int min, int max, int step )
{
    for( int i = min; i < max; i += step )
    {
        array.push_back(i);
    }
}

int main()
{
    std::vector<int> array;
    createArrayRange(array, min, max, step);

    return 0;
}
void createArrayRange(std::vector&array,int-min,int-max,int-step)
{
对于(int i=min;i
您可以为此使用
std::generate

std::vector< int > createArray( int min, int max, int step )
{
    std::vector< int > array((max-min)/step);
    int n = min;
    std::generate(array.begin(), array.end(), 
    [&]()
    { 
        int res = n; 
        n+=step;
        return res; 
    });
    return array;
}
std::vectorcreateArray(int-min,int-max,int-step)
{
std::向量数组((最大-最小)/步长);
int n=最小值;
std::generate(array.begin(),array.end(),
[&]()
{ 
int res=n;
n+=阶跃;
返回res;
});
返回数组;
}

不需要显式循环:

vector<int> data(6,2);
data[0] = 5;
std::partial_sum(data.begin(),data.end(),data.begin());
矢量数据(6,2);
数据[0]=5;
std::部分和(data.begin(),data.end(),data.begin());

如果你问我(我从来没想到过),如果你要做数值计算,那么有C++库在那里模拟Matlab:你也可以看看。