如何使用0到C ++中包含N的元素创建行向量?

时间:2016-12-08 01:51:53

标签: c++ vector armadillo

我想在C ++中创建一个行向量,其中包含0到N的整数元素(我在C ++程序中指定的整数变量)。我已经看过Armadillo C ++库并尝试使用它的span函数,但它没有创建一个向量(而是创建一个类型为arma::span的对象),所以写道:

vec n = span(0,N);

不会创建所需的矢量。如果它有帮助(就像我对我想要的解释不清楚)我知道在MATLAB中这会创建我想要的向量:

n=0:N;

我并不关心使用哪个库(如果有的话),前提是该库可用于大多数主要的Linux发行版(如我现在的Fedora 25)。

2 个答案:

答案 0 :(得分:2)

你可以这样使用std::iota

#include <numeric>
#include <vector>
#include <iostream>

int main()
{
    int N = 9;
    std::vector<int> n(N + 1);
    std::iota(begin(n), end(n), 0);

    for(auto i: n)
    {
        std::cout << i << '\n';
    }
}

Theres可能也是一种很酷的方式,可以在编译时使用std::integer_sequence和一些元编程来完成它。

答案 1 :(得分:1)

您可以像这样使用std::iota函数:

std::vector<int> v(n + 1);
std::iota(v.begin(), v.end(), 0);

或者你可以把它包装成这样的函数:

inline std::vector<int> zero_to_n_vector(std::size_t n)
{
    std::vector<int> v(n + 1);
    std::iota(v.begin(), v.end(), 0);
    return v;
}

auto v = zero_to_n_vector(20);