我正在尝试找到一种有效且正确的方法来填充 2D std::array
矩阵 enum
值(value)。我正在这样做:
#include <iostream>
#include <array>
template<class T, size_t ROW, size_t COL>
using Matrix = std::array<std::array<T, COL>, ROW>;
enum class State { FREE = 0, BUSY, BLOCKED, RESERVED };
int main() {
const int mapX = 4;
const int mapY = 9;
// create a 5x10 2D array
Matrix<State, mapY, mapX> MapMatrix;
// fill array with State::RESERVED value
for (int y = 0; y <= mapY; y++) MapMatrix[y].fill(State::RESERVED);
std::cout << "MapMatrix contains:\n";
for (int y = 0; y <= mapY; ++y) {
for (int x = 0; x <= mapX; ++x) {
std::cout << static_cast<int>(MapMatrix[x][y]) << " ";
}
std::cout << std::endl;
}
return 0;
}
是for循环我正在做用enum
填充矩阵的最佳方法值(value)?有没有办法在声明 Matrix<State, mapY, mapX> MapMatrix
期间填充矩阵(就像构造函数)?
谢谢!
最佳答案
除非用零填充,或者显式指定每个元素,否则无法在初始化时填充它。如果您重新排列枚举以便 RESERVED
为零,那么你可以像这样初始化它:
Matrix<State, mapY, mapX> MapMatrix = {};
如果你做不到这一点,那么是的,for 循环可能是最好的选择。把事情简单化。但你有一些问题。首先,您的评论说您正在创建一个 5x10 数组,但事实并非如此。您正在创建一个 4x9 数组。如果要创建 5x10 数组,则需要传递 5 和 10 作为模板参数。我认为您可能会对大小为 N 的数组的最后一个元素是 N - 1 这一事实感到困惑。这个离一问题仅与访问数组的元素有关,与指定数组的大小无关数组。
其次,您正在迭代数组的末尾,因为您的循环条件是 y <= mapY
,而不是 y < mapY
。但如果你只使用 range-for 循环会更好。
for (auto& arr : MapMatrix)
arr.fill(State::RESERVED);
关于c++ - 如何使用枚举有效填充 2D std::array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43928252/