带有对象指针的c++向量
c++ vector with object pointers
我必须在c++中实现一个小而简单的游戏(迷宫),我现在有一些问题。
一些片段:我有一个对象指针数组它代表迷宫中的字段
Field*** maze;
迷宫初始化:
for (n = 0; n < MAZE_WIDTH; n++) {
this->maze[n] = new Field*[MAZE_HEIGHT];
for (p = 0; p < MAZE_HEIGHT; p++) {
this->maze[n][p] = new Field();
this->maze[n][p]->x = n;
this->maze[n][p]->y = p;
}
}
创建迷宫时,我需要一个已经访问过的字段列表和堆栈所以我照做了:
std::vector<Field*> visited;
std::vector<Field*> stack;
然后我想在堆栈中放入一个字段*
stack.push_back(neighbour);
但是在这个push之后,对象中的所有值都是错误的。即使我尝试
neighbour = stack.back();
所有的值都是完全不同的
我已经看到了一些关于这个话题的帖子,这就是为什么我选择了一个指针向量,而不是对象。
我的错在哪里?
编辑:
我当然会为配偶分配内存
this->maze = new Field**[MAZE_WIDTH];
Field是一个简单的类,看起来像:
class Field {
public:
Field();
~Field();
bool w_left;
bool w_right;
bool w_front;
bool w_back;
unsigned int x;
unsigned int y;
private:
};
既然,你没有张贴你是如何获得值的代码,比较,找出你的问题…
std::vector<std::vector<Field*> > maze;
// Ini
for(int i = 0; i < MAZE_WIDTH; i++)
{
maze.push_back(std::vector<Field*>());
for(int j = 0; j < MAZE_HEIGHT; j++)
{
maze[i].push_back(new Field());
maze[i][j]->x = i;
maze[i][j]->y = j;
}
}
std::vector<Field*> visited;
//将域[4,5]压入访问向量
visited.push_back(maze[4][5]);
// Clean up
for(size_t i = 0; i < maze.size(); i++)
{
for(size_t j = 0; j < maze[i].size(); j++)
delete maze[i][j];
}
为什么将迷宫声明为Field***
?
c++的替代方案是std::vector<std::vector<Field*> > maze;
,这就是你应该使用的
相关文章:
- 写入向量<向量<bool>>
- 函数向量_指针有不同的原型,我可以构建一个吗
- std::向量与传递值的动态数组
- 将值指定给向量(2D)的向量中的某个位置
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 如何使用向量的template_back函数
- 尝试通过多个向量访问变量时,向量下标超出范围
- 如何通过派生类函数更改基类中的向量
- C++从另一个类访问公共静态向量的正确方法是什么
- 如何将ampl中的集合表示为c++中的向量
- 变量没有改变?通过向量的函数调用
- 迭代时从向量和内存中删除对象
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 计算排序向量的向量中唯一值的计数
- 矩阵向量乘法(cublasDgemv)返回零
- 一对向量构造函数:初始值设定项列表与显式构造
- 将结构向量排序为子组
- 在C++中调整向量中的索引
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么