如何在C ++中快速创建数组

时间:2015-02-11 06:31:21

标签: c++ arrays matlab

我已经习惯使用Python或Matlab,我可以创建一个列表:

min = 5;
step = 2;
max = 16;
Range = min:step:max;

和Range将是列表[5,7,9,11,13,15]。

在C ++中生成类似“Range”的列表是否有一种等效的简单方法?到目前为止,我能想到的最简单的事情是使用for循环,但这相当繁琐。

5 个答案:

答案 0 :(得分:5)

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;
    }
}

从那里看起来像这样:

std::vector<int> numbers;
stdx::iota_n(std::back_inserter(numbers), 6, 5, 2);

答案 1 :(得分:2)

你必须自己实现,类似这样:

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;
}

答案 2 :(得分:1)

为此,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
}

或者这会相对更快。

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;
}

答案 3 :(得分:1)

您可以使用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;
}

答案 4 :(得分:0)

不需要显式循环:

vector<int> data(6,2);
data[0] = 5;
std::partial_sum(data.begin(),data.end(),data.begin());