如何访问指向指向对象的指针向量的指针向量的向量中的转发列表中的转发列表?

How to access forward lists in a vector array of pointers to vectors of pointers to forward lists of pointers to objects?

本文关键字:向量 指针 转发 列表 何访问 访问 对象      更新时间:2024-05-09

这是相关的代码段:

std::vector<std::vector<std::forward_list<Person*>*>*> grid;
for (int i = 0; i < criticalValuex; i++) {
std::vector<std::forward_list<Person*>*>* list;
for (int j = 0; j < criticalValuey; j++) {
std::forward_list<Person*>* flist;
list->push_back(flist);
}
grid.push_back(list);
}
for (Person *person : people) {
int i = (int)((person -> getPosition().x - city.getPosition().x + citySize.x / 2) / cellSize);
int j = (int)((person -> getPosition().y - city.getPosition().y + citySize.y / 2) / cellSize);
if (i < citySize.x / cellSize && j < citySize.y / cellSize) {
grid[i][j]->push_front(person);
}
}

忽略人物或任何城市参数。错误不是由变量或类引起的。当我写网格[i][j]->push_front(人)时发生错误;即使它应该有效。

我认为 grid[i][j] 应该是指向前向列表的指针,所以如果我尊重它,那么我会返回前向列表,对吗?但它告诉它没有成员"push_front"。

注意!网格中的元素是指针。

正如std::vector<std::vector<std::forward_list<Person*>*>*> grid;所宣布的,grid[i]的类型是std::vector<std::forward_list<Person*>*>*。 它不是一个数组,而是一个数组的指针。所以grid[i][j]不会编译,而(*(grid[i]))[j]会编译,它的类型是std::forward_list<Person*>*.

如果要进入转发列表,正确的代码是(*(grid[i]))[j]->push_front(...)

更重要的是,将网格声明为类型std::vector<std::vector<std::forward_list<Person*>>>是更简单的方法。