如何在 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
和一些元编程来完成。
我想在 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
和一些元编程来完成。