在构造函数中逐值初始化一个成员vector<vector<int>>
Initializing a member vector<vector<int>> in the constructor value-by-value
我有一个 class 应该生成我想用作地图(称为矩阵)的二维整数向量(在 0-1 范围内)。
class generator
{
public:
void draw(void);
void iterate(void);
generator();
~generator();
private:
vector<vector<int>> matrix;
};
在构造函数中我想用随机数据填充矩阵:
vector<vector<int>> matrix(height, vector<int>(width));
for (int i = 0; i < height; i++){
for (int j = 0; j < width; j++) {
matrix[i][j] = rand() % 2;
}
}
但是我遇到了读取访问冲突。
感谢您的时间和精力。
弃用的更新:
我尝试使用成员函数 .data() 来检索指向数据的指针并直接访问它
ptr = matrix[i][j].data();
*ptr = rand() % 2;
但结果并没有什么不同。我相当确信这不是我想如何访问矢量而是我如何设置它。
更新 2:
下面提供的更正确实导致矢量按预期填充。当试图
cout << matrix[i][j];
在 draw 成员函数中,我再次遇到读取访问冲突。
更新 3:
按照建议,我检查了这个错误发生的确切时间。它发生在第一次尝试打印出矩阵 [0][0] 处的第一个整数时。返回值为 0x8。重要提示:如果不替换为常数 matrix.size() 已经导致错误。
更新 4:
这基本上是我的画法()
void generator::draw() {
for (int i = 0; i < matrix.size(); i++) {
for (int j = 0; j < matrix[i].size(); j++) {
cout << matrix[i][j];
}
cout << endl;
}
}
原始来源已更新以反映当前来源。
更新 4:
在 http://pastebin.com/83vrDJWZ
略微删减了源代码
更新 5:
我的一个更简单的错误已在评论中得到解决。问题解决了。谢谢大家
看起来问题是指针无效,原因是:
vector<vector<int>*> matrix;
您有一个指向 int 向量的指针向量,但您从未实际分配内部元素。
改为使用:
vector<vector<int>> matrix;
并且在初始化步骤中:
matrix[i].resize(width); // instead of: matrix[i]->resize(width);
其实,你可以稍微简化一下:
std::vector<std::vector<int>> matrix(height, std::vector<int>(width));
不过仍然需要迭代来填充数据。
我有一个 class 应该生成我想用作地图(称为矩阵)的二维整数向量(在 0-1 范围内)。
class generator
{
public:
void draw(void);
void iterate(void);
generator();
~generator();
private:
vector<vector<int>> matrix;
};
在构造函数中我想用随机数据填充矩阵:
vector<vector<int>> matrix(height, vector<int>(width));
for (int i = 0; i < height; i++){
for (int j = 0; j < width; j++) {
matrix[i][j] = rand() % 2;
}
}
但是我遇到了读取访问冲突。 感谢您的时间和精力。
弃用的更新: 我尝试使用成员函数 .data() 来检索指向数据的指针并直接访问它
ptr = matrix[i][j].data();
*ptr = rand() % 2;
但结果并没有什么不同。我相当确信这不是我想如何访问矢量而是我如何设置它。
更新 2:
下面提供的更正确实导致矢量按预期填充。当试图
cout << matrix[i][j];
在 draw 成员函数中,我再次遇到读取访问冲突。
更新 3:
按照建议,我检查了这个错误发生的确切时间。它发生在第一次尝试打印出矩阵 [0][0] 处的第一个整数时。返回值为 0x8。重要提示:如果不替换为常数 matrix.size() 已经导致错误。
更新 4:
这基本上是我的画法()
void generator::draw() {
for (int i = 0; i < matrix.size(); i++) {
for (int j = 0; j < matrix[i].size(); j++) {
cout << matrix[i][j];
}
cout << endl;
}
}
原始来源已更新以反映当前来源。
更新 4: 在 http://pastebin.com/83vrDJWZ
略微删减了源代码更新 5: 我的一个更简单的错误已在评论中得到解决。问题解决了。谢谢大家
看起来问题是指针无效,原因是:
vector<vector<int>*> matrix;
您有一个指向 int 向量的指针向量,但您从未实际分配内部元素。
改为使用:
vector<vector<int>> matrix;
并且在初始化步骤中:
matrix[i].resize(width); // instead of: matrix[i]->resize(width);
其实,你可以稍微简化一下:
std::vector<std::vector<int>> matrix(height, std::vector<int>(width));
不过仍然需要迭代来填充数据。