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

Тема в разделе "Общие вопросы по С и С++", создана пользователем -, 28 ноя 2009.

  1. Гость

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

    Написал класс 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();                    //возвращает цену


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

    DCoder Гость

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

    я нашел вот такое решение:
    Код (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;

    }
     
  4. RocknRolla

    RocknRolla Гость

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

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


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

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

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


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

    sega3 New Member

    Регистрация:
    24 мар 2009
    Сообщения:
    4
    Симпатии:
    0
    помоему лудше использовать файл а не масив размер всегда можно величить и постояно хранится бдет
     
Загрузка...

Поделиться этой страницей