二维矢量数据成员

2-dimensional vector data member

本文关键字:数据成员 二维      更新时间:2023-10-16

我收到EXC错误访问错误。不知道问题是什么。我正在尝试测试 2d 载体内的单元格。我希望它打印 0 的 20x20 网格

struct Cell {
int test;
Cell(): test(0) {}
};
class Board {
public:
Board() {
for (int i = 0; i < 20; i++) {
Cell temp;
cellVec[i].resize(20, temp);
}
}
friend ostream& operator<<(ostream& out, const Board& boardPrint) {
for (int i = 0; i < 20; i++) {
for (int j = 0; j < 20; j++) {
out << boardPrint.cellVec[i][j].test;
}
}
return out;
}
private:
vector< vector<Cell> > cellVec;
};
int main() {
Board newBoard;
cout << newBoard;
}

在代码中,cellVec是默认初始化的,不包含任何元素。然后尝试像cellVec[i]一样访问它的元素会导致 UB。

您可以将cellVec初始化为包含成员初始值设定项列表中的 20 个元素,例如

Board() : cellVec(20) {
//        initialize cellVec as containing 20 default-initialized std::vector<Cell>s which containing no elements
for (int i = 0; i < 20; i++) {
Cell temp;
cellVec[i].resize(20, temp);
}
}

或直接

Board() : cellVec(20, std::vector<Cell>(20)) {}
//        initialize cellVec as containing 20 std::vector<Cell>(20)s which containing 20 Cells