• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

как увеличить размерность массива?

  • Автор темы Guest
  • Дата начала
G

Guest

Всем привет. У меня такая проблема:

Написал класс avto, в нем данные об автомобиле.Моя задача создать массив таких классов изначально задав размерность этого массива. Данная программа должна осуществлять следующее:
1. Вывод всего списка автомобилей.
2. Поиск по марке автомобиля.
3. Возможность добавления нового автомобиля( нового класса с данными об автомобиле в список).

И так первые 2 пункта я сделал, а вот как добавить новый элемент в массив увеличив исходную размерность я не могу додуматься...

вот моя функция main():

C++:
void main() 
{
int n,i,z;

avto *spis;
cout<<"vvedite kolvo mashin :"<< endl;
cin>>n;
spis=new avto [n];
for( i = 0; i < n; i++) 
{
cout << "==============================" << endl;
spis[i].zapolnenie();
}

do {
cout<<"-*-*-*-*-*-*-*-*--*-*-*-*-*-*-*-*-*-*-*"<< endl;
cout<<"1-vivesti vesi spisok; 2-naiti marku; 3-dobaviti mashinu; 0-vihod."<< endl;
cin>>z;
vibor(z,spis,n);
}while (z!=0);
}


вот функция вывода всего списка и поиска по марке (добавление элемента я тоже попытался сделать здесь ) :
C++:
void vibor(int z,avto *spis,int n)
{
//	avto *sps;
char s[10];
int i,r=0,g=0;
if (z==1)
{	int y=g+n;
for( i = 0; i < y; i++) 
{
spis[i].show();
}
}
else
{
if (z==2)
{
cout<<"Vvedite marku mashini : "<< endl;
cin>>s;
for( i = 0; i < n; i++)
{
if (strcmp(spis[i].m(),s)==0)
{
spis[i].show();r++;
}
}
if (r==0) cout<<endl<<"Net takoi marki v nashem salone!"<<endl<<endl;
}
//добавление нового элемента
else
{
g++;
spis=new avto [n+1];
cout << "==============================" << endl;
spis[n].zapolnenie();
}		
}
}
сам класс:
C++:
struct data
{
int den,mes,god;
};

class avto
{
private:
char marka[20];//марка машины
char cvet[15];  //цвет машины
int s_num;		//серийный номер
int reg_num;	 //регистрационный номер
int dver;		  // кол-во дверей
int price;		  //цена
data data_reg;  //дата регистрации

public:
void zapolnenie();  // заполнение данными
void show();			//вывод данных
char* m();			 //возвращает марку
char* c();				//возвращает цвет
int s_n();				 //возвращает серийный номер
int r_n();				 // возвращает рег-й номер
int d();					//возвращает кол-во дверей
int p();					//возвращает цену


};

Я знаю что не верно организовываю добавление элемента, может кто-нибудь разберется как это сделать?
 
D

DCoder

Вместо массива лучше использовать класс vector библиотеки stl, либо выделять память под массив через malloc, realloc
 
G

Guest

я нашел вот такое решение:
C++:
 avto *Add(avto spis[],int n)
{
avto *spis1;
spis1=new avto[n];
for(int i=0;i<n;i++)
spis1[i]=spis[i];
spis1[n-1].zapolnenie();
delete []spis;
spis=spis1;
return spis1;

}
 
R

RocknRolla

2 Юран : твое решение противоречит всем правилам оптимизации.

Вся проблема кроется в самой организации класса, что собственно и не позволяет тебе добавлять новый элемент.


Попробуй написать класс примерно так:

class avtopark
{
private:
avto mashina;
int koli4estvo;
////////////.........

};
class avto
{
private:
char marka[20];//марка машины
char cvet[15]; //цвет машины
int s_num; //серийный номер
int reg_num;
//////////////...............
};
 
G

Guest

2 Юран : твое решение противоречит всем правилам оптимизации.

Вся проблема кроется в самой организации класса, что собственно и не позволяет тебе добавлять новый элемент.


Попробуй написать класс примерно так:

class avtopark
{
private:
avto mashina;
int koli4estvo;
////////////.........

};
class avto
{
private:
char marka[20];//марка машины
char cvet[15]; //цвет машины
int s_num; //серийный номер
int reg_num;
//////////////...............
};


Правила оптимизации на тот момент меня не очень волновали. Сейчас бы я сделал иначе...
 
S

sega3

помоему лудше использовать файл а не масив размер всегда можно величить и постояно хранится бдет
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!