我试图在c ++中做作业,我不能使用STD容器类,如vector,map等。假设我们有以下存档:
2
El juego de Ender-Orson Scott-Tor Books-980.275.246-1985-6000
890365.2
2
The following-Lily Tyler-Tor Books-980.275.246-1985-6000
890365.2
为了便于说明,我们假设数字2表示一本书来自X类,在这种情况下,2表示是一本小说,2之后的下一行只是基本书籍数据(名称,作者,出版社,isbn) ,年,价格)以及之后的下一行只是我们打算称之为CCF的东西,它只是小说类别中这些类型书籍的另一个代码。
我只是坚持下一部分,我知道如何创建没有容器类的对象数组,但我不知道如何调整此数组的大小,我听说过realloc ,但我不知道如何将它与对象数组类型一起使用。 Libro是Ficcion的父母,我试图将Ficcion类型存储在Libro的多态数组中,因为后来我必须在同一个数组中引入更多类,但出于学习目的,我试图调整大小只是ficcion类,据说,我知道下面的代码是错误的,因为我使用malloc并将子对象分配给new然后重新分配,但正如我所说,我不知道如何如果你看到代码,你可以告诉你每隔3次创建一个新的子对象inFile已经执行了getline,如果你认为有些东西丢失了请告诉我,但是我认为我是&#39暴露涵盖了这个问题的主要问题。当你必须处理这些类型的数组并且你需要调整它们的大小时,我只是要求一些信息的启发,我也知道这对容器类来说会更容易,但我不能这样做这次使用它。提前致谢!有一个美好的一天/晚上!
void BookManager::dataLoading(char* fileName){
//Arbitrary size to be resized later on (this is the array declared as **libro in the .h file)
libros = (Libro**)malloc(1 * sizeof(Libro**));
//file-in variable
std::ifstream inFile(fileName);
char type[10];
//counter
int i = 0;
//First getline
while (inFile.getline(type,sizeof(inFile)) && i < 2){
//Book Info; Second Getline
char bookInfo[100];
inFile.getline(bookInfo, sizeof(inFile));
//Additional book information; Third getline
char additional[60];
inFile.getline(additional, sizeof(inFile));
//Child creation
if (type[0] == '2'){
this->separateData(bookInfo);
//Ficcion constructor creating an object to store in the libros polymorphic array
libros[i] = new Ficcion(this->bookData[0], this->bookData[1], this->bookData[2], atof(this->bookData[3]), atoi(this->bookData[4]), atoi(this->bookData[5]), atof(additional));
}
i++;
//Failed reallocating
libros = (Libro**)realloc(libros, i+1 * sizeof(Libro**));
}
// This one is just testing if the array worked but i get an unhandled exception when i=1;
for (int i = 0; i < 2; i++){
std::cout << libros[i]->getTitulo() << '\n';
}
inFile.close();
}
更新解决方案: 因为这是一个指针数组,如下所示,我创建了一个函数,它调整它的大小并删除旧的函数,返回带有旧数据和存储空闲空间的新函数。到目前为止,这是有效的,非常感谢!
Libro** BookManager::resize(Libro** arr,int size){
Libro** resized = new Libro*[size];
for (int i = 0; i < size-1; i++){
resized[i] = arr[i];
}
delete[]arr;
return resized;
}
答案 0 :(得分:2)
malloc,realloc等..是C库函数。您的问题带有C++
标记,而不是C
。
在C ++中,对象分配new
,并用delete
解除分配。这包括数组。
要调整现有数组的大小,可以使用new
分配一个具有新大小的新数组,将现有数组中的元素复制到其中,然后使用delete
解除分配旧数组。 / p>
(这在技术上并非100%正确,但这可能是您在作业中应该做的事情。)