需要类 2D 数组 (C++) 的帮助

need help for 2d array in class (c++)

本文关键字:C++ 帮助 数组 2D      更新时间:2023-10-16

在这种情况下,我想删除书,但我尝试声明此代码,它不起作用。

class Library {
private:
Book **books;
int counter;
public:
Library() {
books = NULL;
counter = 0;
}
void Add(INPUT &tmp) {
books = new Book*[counter];
++counter;
}
void Delete() {
--counter;
delete[] books[counter];
books[counter] = NULL;
}
int getCounter() {
return this->counter;
}
~Library() {
delete[] books;
}
};

在开始删除工作之前,您需要正确添加。

除了 Jeffrey 所说的之外,您的Add函数可能由于"逐个输出"错误而无法正常工作。在第一个电话中,您将有books = new Book*[0];.分配一个零大小的数组是合法的(见这里(,但您将无法在其中存储任何内容。

如果你可以使用std::vector它将使您的代码更简单,更不容易出错。

class Library {
private:
std::vector<Book> books;
// no need for counter, std::vector has size()
public:
// no need for a constructor, the default constructor
// will correctly construct 'books'
void Add(INPUT &tmp) {
// not sure how you convert 'INPUT' to 'Book'
books.push_back(tmp);
// this handles all of the memory management for you
}
void Delete() {
// you need to ensure that books is not empty
books.pop_back();
}
int getCounter() {
return books.size();
}
// no need for a destructor, the default one will
// do everything
};

如果你需要二维,那么代码是类似的,但将使用向量的向量。

Book **books; 

是指向书籍的指针。这是拥有书籍列表(作为指针(或书籍列表的旧式方式。

Library() {
books = NULL;
counter = 0;
}

这将创建一个空库。没有书。

void Add(INPUT &tmp) {
books = new Book*[counter];
++counter;
}

首先要注意的是,您没有使用tmp书。因此,如果不使用它,您可能无法成功将其存储在任何地方。

第二件事是books = new Book*[counter];分配了一个图书馆的书籍。存放一些书籍的空间。您可能应该在构造函数中执行此操作。如果你在那里这样做,每次你尝试添加一本书时,你都会失去所有其他的,你也会泄漏记忆。

这里有两种可能性。您有一位老教授C++,您需要了解指针和指向指针的指针,以及新的删除。或者你可以了解std::vectors和智能指针。这将是一个更好的主意,但我不能告诉你它会在你的课堂上得到多大的接受。

另外,请说明输入的定义是什么。