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

How to create a row vector with elements from 0 up to and including N in C++?

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

vec n = span(0,N);

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

n=0:N;

我真的不在乎使用哪个库(如果有的话),只要该库在大多数主要 Linux 发行版(比如我现在的 Fedora 25)上都可用。

您可以像这样使用函数 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);

您可以像这样使用 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';
    }
}

可能还有一种很酷的方法可以在编译时使用 std::integer_sequence 和一些元编程来完成。