c++:以编程方式初始化constexpr std-2DArray



我是C++新手,正在学习中。我有一个矩阵定义类型:

using Matrix = std::array<std::array<T, COL>, ROW>;

我可以"手动"初始化一个 constexpr 矩阵

constexpr Matrix<int, 2,2> mat{ {
{{ 1,2 }},
{{ 3, 4 } }
}};

这对于 ROW,COL 的大型示例是不可行的。相反,我想用函数"以编程方式"(即通过循环或类似方式)初始化它fill_entry以便mat[i][j]取值fill_entry(i,j)fill_entry是这样的

template<T>
constexpr T fill_entry(T This_object_has_type_T,int i , int j).

正确的方法是什么?我使用 C++17

您可以使用立即调用的 lambda:

constexpr auto mat = []() {
Matrix<int, 2, 2> result{};
int value = 1;
for (std::size_t i = 0; i < result.size(); ++i) {
for (std::size_t j = 0; j < result[0].size(); ++j) {
result[i][j] = value;
++value;
}
}
return result;
}();

如果你需要像这样初始化多个变量,你可以把它做成一个函数:

template<typename T, std::size_t Rows, std::size_t Cols>
constexpr Matrix<T, Rows, Cols> create_mat() {
Matrix<T, Rows, Cols> result{};
int value = 1;
for (std::size_t i = 0; i < result.size(); ++i) {
for (std::size_t j = 0; j < result[0].size(); ++j) {
result[i][j] = static_cast<T>(value);
++value;
}
}
return result;
}

并称其为create_mat<int, 2, 2>().

最新更新