调整对象数组的大小 我试图在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

调整对象数组的大小 我试图在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,c++,arrays,realloc,C++,Arrays,Realloc,为了便于解释,我们假设数字2表示一本书来自X类别,在本例中,2表示一本小说,2后面的下一行只是基本图书数据(名称、作者、出版社、isbn、年份、价格)接下来的一行我们称之为CCF,这是小说类书籍的另一个代码 我只是停留在下面的下一部分,我知道如何创建一个没有容器类的对象数组,但我不知道如何调整这个数组的大小,我听说过realloc,但我不知道如何将它用于对象数组类型。Libro是Ficcion的父级,我试图将Ficcion类型存储在Libro的多态数组中,因为稍后我必须在同一数组中引入更多类,但

为了便于解释,我们假设数字2表示一本书来自X类别,在本例中,2表示一本小说,2后面的下一行只是基本图书数据(名称、作者、出版社、isbn、年份、价格)接下来的一行我们称之为CCF,这是小说类书籍的另一个代码

我只是停留在下面的下一部分,我知道如何创建一个没有容器类的对象数组,但我不知道如何调整这个数组的大小,我听说过realloc,但我不知道如何将它用于对象数组类型。Libro是Ficcion的父级,我试图将Ficcion类型存储在Libro的多态数组中,因为稍后我必须在同一数组中引入更多类,但出于学习目的,我尝试仅使用Ficcion类调整大小,也就是说,我知道下面的代码是错误的,因为我正在使用malloc并用new分配子对象,然后重新分配,但正如我所说的,我根本不知道如何做,因为如果你看到代码,你可以知道每3次infle执行getline,就会创建一个新的子对象,如果你认为遗漏了什么,请告诉我,但我认为我所揭露的涵盖了这个问题的主要问题。我只是想了解一些信息,当您必须处理这些类型的数组并且需要调整它们的大小时,我也知道使用容器类会更容易一些,但这次我不能使用它。提前谢谢!祝你白天/晚上愉快

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();
void BookManager::数据加载(char*fileName){
//以后要调整大小的任意大小(这是在.h文件中声明为**libro的数组)
libros=(Libro**)malloc(1*sizeof(Libro**));
//变量中的文件
std::ifstream infle(文件名);
字符类型[10];
//柜台
int i=0;
//一线
while(infle.getline(type,sizeof(infle))和&i<2){
//图书信息;第二行
char bookInfo[100];
获取行(bookInfo,sizeof(infle));
//附加图书信息;第三行
char-additional[60];
填充线(附加,尺寸为(填充线));
//儿童创造
如果(类型[0]=“2”){
此->分离数据(bookInfo);
//Ficcion构造函数创建要存储在libros多态数组中的对象
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(其他));
}
i++;
//重新分配失败
libros=(Libro**)realloc(libros,i+1*sizeof(Libro**));
}
//这只是测试数组是否工作,但当i=1时,我得到一个未处理的异常;
对于(int i=0;i<2;i++){

std::cout getitulo()malloc、realloc等是C库函数。您的问题带有
C++
标记,而不是
C

<>在C++中,对象被分配为<代码>新< /C>,并与<代码> Debug 解除关系。这包括数组。< /P> 要调整现有数组的大小,请使用
new
分配新数组,使用新大小将现有数组中的元素复制到新数组中,然后使用
delete
取消分配旧数组


(这在技术上并非100%正确,但这很可能是您作为任务的一部分应该做的事情)

你不能调整数组。你可以做的是做一个新的数组,复制数据,然后删除旧的。在C++中,使用<代码>新< /COD>和<代码>删除< /代码>如果你必须,不要<代码> MalOC/<代码>。使用<代码> UngyjPPTR < /C> >和<代码> MaxIO独特的< /代码>如果你可以的话。这证实了我的想法,非常感谢!我只是想如果e是一种更“可行”或更有效的方法,通过一些我从未听说过的函数
(Libro**)malloc(1*sizeof(Libro**));
分配了错误的大小。你应该使用
new
而不是malloc来避免这个问题。“…用
delete
”解除旧数组的分配-实际上,这就是
delete[] C++标准库的大部分也是C++的一部分。
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;