На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> Создание динамического массива в Borland C++ 3.11
    Я начинающий программист в С++. Но вот столкнулся с такой проблемой:
    В Borland c++ 5.x есть класс vector, который собственно и представляет из себя динамический массив, но вот использовать я его не могу, т.к. в Borland C++ 3.11 его нет,а мне надо сдавать задачу на нём!
    Кто нибудь знает как реализовать динамический массив на Borland C++ 3.11, с использованием стандартных библиотек?
      Всё, приехали... а я то, балда, думал, что динамические массивы
      создаются: 1) malloc, 2) new
      удаляются: 1) free, 2) delete
      перераспределяются: 1) realloc

      Кстати, ты уверен, что в BC++3.1 нет шаблона vector? По моему он всетаки есть, тока чуть-чуть в другой модификации...
        Пример. Это уже в функции main, просто показывает как создать динамический массив с неизвестным количеством элементов.
        CODE
        int *a,n;
        printf("Укажите количество элементов массива: "); scanf("%d",&n);
        a = new int[n];
        // теперь динамический массив создан, как видно, неизвестно изначально, какой он будет размерности. К элементам можно обращаться так: a[2], a[3]...
        // что-то делаем
        delete a; // освобождаем память
        Сообщение отредактировано: KAV -
          Могe скинуть Борландовский класслиб на мыл, там есть массивы и прочее. зип файл около 300К. Если надо, мое мыло в профайле, пиши с темой "Класслиб Борланд 3.1"

          PS. Мобыть я не прав, но 3.11 - это Винда такая была, а Борланд все же 3.1?
            QUOTE (KAV @ 13.11.03, 18:08)
            Пример. Это уже в функции main, просто показывает как создать динамический массив с неизвестным количеством элементов.
            CODE
            int *a,n;
            printf("Укажите количество элементов массива: "); scanf("%d",&n);
            a = new int[n];
            // теперь динамический массив создан, как видно, неизвестно изначально, какой он будет размерности. К элементам можно обращаться так: a[2], a[3]...
            // что-то делаем
            delete a; // освобождаем память

            Это пройдёт если я в последний момент всё же знаю сколько элементов будет в массиве, а мне надо считать из файла,не определённое зарание колличество чисел!
            Как это сделать?
              QUOTE (Uncle_Bob @ 13.11.03, 18:22)
              Могe скинуть Борландовский класслиб на мыл, там есть массивы и прочее. зип файл около 300К. Если надо, мое мыло в профайле, пиши с темой "Класслиб Борланд 3.1"
              PS. Мобыть я не прав, но 3.11 - это Винда такая была, а Борланд все же 3.1?

              Вышли, пожалуйста, на diehardmail@timus.ru.
                Послал.
                  @timus.ru

                  А ты, случаем, к с http://acm.timus.ru/ не относишься как-нибудь? smile.gif
                    ПисАть за тебя не буду, но могу подсказать алгоритм. wink.gif Ващще чиста бесплюсовый! Голый Це и АПИ.
                    1)SizeArray=0L;
                    2)Portion=1024;// Здесь может быть почти любое положительное число которое тебе нравится.
                    3)Выделяешь первоначально память Array размером Portion. При помощи ф-ий HeapAlloc() или calloc(), malloc().
                    4)Читаешь из файла по указателю Array в выделенную память блок в Portion байт. Для этого используй ф-ию ReadFile().
                    Если она вернула TRUE, а четвёртый параметр меньше Portion, то данных всего столько сколько прочли. Тогда:
                    {
                    SizeArray=[значение в четвёртом параметре ф-ии ReadFile()];
                    При помощи ф-ий HeapReAlloc() или realloc() обрубаешь массив Array под реальный его размер SizeArray.
                    END.
                    }
                    Если она вернула TRUE и четвертый параметр == Portion, то всё считалось отлично и данные в файле есть ещё.
                    {
                    Далее цикл:
                    SizeArray+=Portion;
                    Добавим ещё памяти. При помощи ф-ий HeapReAlloc() или realloc(). Здесь размер выделяемой памяти (второй параметр в ф-ии realloc() ) задаётся переменной SizeArray.
                    Выставь указатель на новый кусок памяти: NewPoint=Array+SizeArray-Portion;
                    ReadFile(). Читаешь на указатель NewPoint порцию в Portion байтов.
                    Если ReadFile() вернула TRUE и четвертый параметр == Portion, то всё считалось отлично и данные в файле есть ещё. Перейти в начало цикла.
                    Иначе - данные кончились. Реальный размер массива будет равен SizeArray=SizeArray-Portion+[значение в четвёртом параметре];
                    При помощи ф-ий HeapReAlloc() или realloc() обрубаешь массив Array под реальный его размер SizeArray.
                    END.
                    }
                    Ух, запарился писАть! blink.gif biggrin.gif
                    Сообщение отредактировано: DrUnkard -
                      QUOTE (KAV @ 13.11.03, 18:08)
                      Пример. Это уже в функции main, просто показывает как создать динамический массив с неизвестным количеством элементов.
                      CODE
                      int *a,n;
                      printf("Укажите количество элементов массива: "); scanf("%d",&n);
                      a = new int[n];
                      // теперь динамический массив создан, как видно, неизвестно изначально, какой он будет размерности. К элементам можно обращаться так: a[2], a[3]...
                      // что-то делаем
                      delete a; // освобождаем память

                      KAV немного опечатался, удалять динамический массив нужно так:
                      CODE

                      delete [] a;

                        QUOTE (KAV @ 13.11.03, 15:08)
                        Пример. Это уже в функции main, просто показывает как создать динамический массив с неизвестным количеством элементов.
                        CODE
                        int *a,n;
                        printf("Укажите количество элементов массива: "); scanf("%d",&n);
                        a = new int[n];
                        // теперь динамический массив создан, как видно, неизвестно изначально, какой он будет размерности. К элементам можно обращаться так: a[2], a[3]...
                        // что-то делаем
                        delete a; // освобождаем память

                        KAV немного ошибся в написании кода.

                        Удалять динамический массив нужно следующим образом:

                        CODE

                        delete [] a;
                        1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                        0 пользователей:


                        Рейтинг@Mail.ru
                        [ Script execution time: 0,0511 ]   [ 15 queries used ]   [ Generated: 17.05.24, 05:36 GMT ]