0

二维数组,例如:Cell **scoreTable. 分配后:

scoreTable = new Ceil*[10]; 
for(int i = 0 ;i<10;i++) 
scoreTable[i] = new Ceil[9]; 

我想保存这样的值:scoreTable[i][j]= new Ceil(i,j)在堆中,这在 c++ 中不起作用。谢谢你的帮助。

4

3 回答 3

1

scoreTable[i][j]= new Ceil(i,j). 您正在尝试放入Cell*Cell。

您必须创建二维指针数组:

auto scoreTable = new Ceil**[10]; 
for(int i = 0 ;i<10;i++) 
    scoreTable[i] = new Ceil*[9]; 

但更好的是使用vector

std::vector< std::vector<Ceil*> > table;
table.resize(10);
for (int i = 0; i < 10; ++i)
{
    table[i].resize(9, NULL);
}
table[3][4] = new Ceil();
于 2012-05-08T10:00:10.127 回答
0

一旦你像这样分配了你的数组,你就已经有了一个 2D 数组Cell,所以你不需要使用new关键字来更改值。

如果你给你的Cell类一个类似的方法SetValue(i,j),那么你可以像这样使用它:scoreTable[i][j].SetValue(i,j);

于 2012-05-08T10:02:35.697 回答
0

我想建议std::vector改用。跟踪起来要容易得多。

您可以将上面的所有代码替换为

std::vector< std::vector< Cell> > scoreTable(10, std::vector<Cell>(9));

这将创建scoreTable,这是一个包含 10 个元素的向量vector<Cell>,每个元素包含 9 个单元格。换句话说,所需的 2D 表。

您以相同的方式访问元素。scoreTable[i][j],其中 i 从 0 到 9,j 从 0 到 8。

如果你想扩展一个新行,只需说:

 scoreTable.push_bach(std::vector<Cell>(9));

对于新列:

for(size_t row = 0; row < scoreTable.size(); ++row) {
  scoreTable[row].push_back(Cell());
}

不需要newor delete

于 2012-05-08T10:25:28.447 回答