C++ C++;声明后初始化数组大小?

C++ C++;声明后初始化数组大小?,c++,arrays,C++,Arrays,这是一个作业,所以我只能使用什么运算符等。我不会用向量 我的程序接受迷宫的输入并求解它 最初我使用了这个数组: Crumb* crumbs[MAX_SIZE]; 迷宫最初是固定大小的,因此,我们可以将碎屑数组初始化为其最大可能大小。但是,现在我们必须更改它,以便迷宫的大小是动态的,我们还必须使用“new”操作符(和delete)动态分配内存 我们被告知将上述代码更改为: Crumb** crumbs; 我现在真的不知道如何调整我的类以使用这个新声明。下面的代码是我处理数组(crump对象数

这是一个作业,所以我只能使用什么运算符等。我不会用向量

我的程序接受迷宫的输入并求解它

最初我使用了这个数组:

Crumb* crumbs[MAX_SIZE];
迷宫最初是固定大小的,因此,我们可以将碎屑数组初始化为其最大可能大小。但是,现在我们必须更改它,以便迷宫的大小是动态的,我们还必须使用“new”操作符(和delete)动态分配内存

我们被告知将上述代码更改为:

Crumb** crumbs; 
我现在真的不知道如何调整我的类以使用这个新声明。下面的代码是我处理数组(crump对象数组)的完整类

Trail::Trail(){
}
Trail::~Trail(){
}
int Trail::size(){
返回长度;
}
crump*Trail::getPtr(inti){
归还面包屑[i];
}
无效轨迹::添加副本(碎屑*t){
碎屑[长度]=新碎屑(*t);
长度++;
}
布尔轨迹::包含(整数x,整数y){
bool-contains=false;
for(int i=0;igetX()==x&&crumps[i]->getY()==y){
包含=真;
}
}
返回包含;
}
bool Trail::containsStale(整数x,整数y){
bool-contains=false;
for(int i=0;igetX()==x&&crumps[i]->getY()==y){
if(crumps[i]>isStale()==true){
包含=真;
}
}
}
返回包含;
}
我已经阅读了输入和大小,所以在调用这个类的时候,我知道迷宫的大小,我只是不知道现在如何初始化和使用crumbs数组

声明后是否初始化数组大小

你不能。声明时必须知道数组变量的大小


只需分配一个动态数组即可。最简单的解决方案是使用
std::vector
,但如果您不能使用它,那么就实现您自己的vector类。

您做得还不够
addCopy()
盲目地做
crumps[length]=新的crump(*t)。这将创建一个新的
crumb
实例,但不会神奇地增加
crumb
中的元素数量。如果为
crumbs
分配的实际元素数为
length
,则访问
crumbs[length]
会产生未定义的行为-它不会神奇地增加
crumbs
的有效元素数。递增<<代码>长度>代码>,这个函数也不会改变<代码>有效的元素的数量> CRUBS。同时,认真考虑是否需要一个指针数组(<代码> CRUB**/COD>),而不是一个数组>代码> CRUMB < /代码>。C++不是一种具有引用语义的语言(如java或任何其他语言),不需要使用<代码>新< /COD>初始化每个对象。事实上,这样做既不必要,又导致内存泄漏。
Trail::Trail() {
}
Trail::~Trail() {
}

int Trail::size() {
   return length;
}

Crumb* Trail::getPtr(int i) {
   return crumbs[i];
}

void Trail::addCopy(Crumb* t) {
   crumbs[length] = new crumb(*t);
   length++;
}

bool Trail::contains(int x, int y) {
   bool contains = false;

   for(int i = 0; i < length; i++){
      if(crumbs[i]->getX() == x && crumbs[i]->getY() == y){
         contains = true;
      }
   }
   return contains;
}

bool Trail::containsStale(int x, int y) {
   bool contains = false;

   for(int i = 0; i < length; i++){

      if(crumbs[i]->getX() == x && crumbs[i]->getY() == y){
         if(crumbs[i]->isStale() == true){
            contains = true;
         }
      }
   }
   return contains;
}