c ++中的2D对象数组?

时间:2012-05-08 09:56:59

标签: c++ arrays pointers

2D数组,例如: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 ++中无效。感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

scoreTable[i][j]= new Ceil(i,j)。您正试图将Cell*放入Cell。

你必须创建2d指针数组:

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

答案 1 :(得分:0)

一旦你像这样分配了你的数组,你就已经拥有了Cell的二维数组,所以你不需要使用new关键字来改变它。

如果您为Cell课程提供类似SetValue(i,j)的方法,那么您可以像这样使用它:scoreTable[i][j].SetValue(i,j);

答案 2 :(得分:0)

我想建议改用std::vector。跟踪它会容易得多。

您可以使用

替换上面的所有代码
std::vector< std::vector< Cell> > scoreTable(10, std::vector<Cell>(9));

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

您可以以相同的方式访问元素。 scoreTable[i][j],其中我从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());
}

无需newdelete