gpt4 book ai didi

c++ - 在构造函数中逐值初始化一个成员vector>

转载 作者:行者123 更新时间:2023-11-30 05:34:04 25 4
gpt4 key购买 nike

我有一个类应该生成我想用作 map (称为矩阵)的二维整数 vector (在 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;

但结果并没有什么不同。我相当确信这与我想如何访问 vector 无关,而是与我如何设置它有关。

更新 2:

下面提供的更正确实会按预期填充 vector 。当试图

cout << matrix[i][j];

在 draw 成员函数中,我再次遇到读取访问冲突。

更新 3:

按照建议,我检查了这个错误发生的确切时间。它发生在第一次尝试打印出矩阵 [0][0] 处的第一个整数时。返回值为 0x8。重要提示:如果不替换为常量 matrix.size() 已经导致错误。

更新 4:

这基本上是我的 draw()

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;
}
}

原始来源已更新以反射(reflect)当前来源。

更新 4:在 http://pastebin.com/83vrDJWZ 略微削减了源代码

更新 5:我的一个更简单的错误已在评论中得到解决。问题解决了。谢谢大家。

最佳答案

看起来问题是由于以下原因导致的无效指针:

vector<vector<int>*> matrix;

您有一个指向 int vector 的指针 vector ,但您从未实际分配内部元素。

改为使用:

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));

不过,仍然需要迭代来填充数据。

关于c++ - 在构造函数中逐值初始化一个成员vector<vector<int>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34466740/

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