gpt4 book ai didi

c++ - 如何有效地用枚举填充 2D std::array

转载 作者:搜寻专家 更新时间:2023-10-31 00:28:45 32 4
gpt4 key购买 nike

我正在尝试找到一种有效且正确的方法来填充二维 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/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com