Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

динамический массив

19K
29 июля 2006 года
HiWorld
2 / / 29.07.2006
Скажите пожалуйста !!!
Как создать динамический двумерный массив SpeedButton'ов в Билдере?
1
30 июля 2006 года
kot_
7.3K / / 20.01.2000
[QUOTE=HiWorld]Скажите пожалуйста !!!
Как создать динамический двумерный массив SpeedButton'ов в Билдере?[/QUOTE]
 
Код:
#define MAX1 10
#define MAX2 20
typedef TSpeedButton* TSpeedButtonPtr;
TSpeedButtonPtr *dynSpeedButton = new TSpeedButton[MAX1];
for(int i = 0; i < MAX1;i++){
 dynSpeedButton = new TSpeedButton[MAX2];
}

Cоздаст массив 10х20
15K
30 июля 2006 года
casual
11 / / 18.03.2006
 
Код:
#define MAX1 10
#define MAX2 20
typedef TSpeedButton* TSpeedButtonPtr;

// здесь нужно исправить
TSpeedButtonPtr *dynSpeedButton = new TSpeedButtonPtr[MAX1];
for(int i = 0; i < MAX1;i++){
 dynSpeedButton = new TSpeedButton[MAX2];
}
1
31 июля 2006 года
kot_
7.3K / / 20.01.2000
[QUOTE=casual]
 
Код:
#define MAX1 10
#define MAX2 20
typedef TSpeedButton* TSpeedButtonPtr;

// здесь нужно исправить
TSpeedButtonPtr *dynSpeedButton = new TSpeedButtonPtr[MAX1];
[/QUOTE]
Да, естественно это и имелось ввиду - первоначальный вариант был без typedef - забыл исправить. Спасибо за внимательность. :)
15K
31 июля 2006 года
casual
11 / / 18.03.2006
И мы оба забыли про параметр конструктора :)
1
01 августа 2006 года
kot_
7.3K / / 20.01.2000
[QUOTE=casual]И мы оба забыли про параметр конструктора :)[/QUOTE]
И потому данный код работать не будет - потому как у данного компонента нет конструктора по умолчанию. А при приведении к базовому типу - получим исключение - чему даже удивлятся не нужно. :)
Таким образом остается один вариант - использовать контейнеры STL типа map или подобный ему. Или найти способ обойтись одномерным массивом ;)
15K
01 августа 2006 года
casual
11 / / 18.03.2006
Можно и так: добавить лишее измерение...

Код:
void TForm1::myFunc (const unsigned int rows, const unsigned int cols,
TSpeedButton **** spdArray3dPtr, TWinControl * owner)
{
        #define spdArray3d (*spdArray3dPtr)
        unsigned int i;

        spdArray3d = new TSpeedButton **[rows];

        *spdArray3d = new TSpeedButton*[rows*cols];

        for (i=1u; i<rows; ++i)
                spdArray3d = spdArray3d[i-1] + cols;

        for (i=0; i<rows; ++i)
        {
                for (unsigned int j=0; j<cols; ++j)
                {
                        spdArray3d[j] = new TSpeedButton(owner);
                     /*//тестирование
                        spdArray3d[j]->Caption = AnsiString(i)+AnsiString(j);
                        spdArray3d[j]->Left = j*50;
                        spdArray3d[j]->Top  = i*50;
                        spdArray3d[j]->Width  = 45;
                        spdArray3d[j]->Height = 45;
                        spdArray3d[j]->Parent = owner;
                     // конец тестирования
                     //*/
                }
        }

/* Зачистка
        // по идее, кнопки сами удалятся, так как у них есть владелец
        for (i=0; i<rows; ++i)
        {
                for (unsigned int j=0; j<cols; ++j)
                {
                        delete spdArray3d[j];
                }
        }
        delete [] spdArray3d[0];
        delete [] spdArray3d;
//*/
        #undef spdArray3d
}
19K
01 августа 2006 года
HiWorld
2 / / 29.07.2006
Ого! Спасибо, парни! Я прямо преклоняюсь перед талантом!
Надеюсь, буду в состоянии разобраться со всем тем, что вы понаписали =) Еще раз спасибо.
294
02 августа 2006 года
Plisteron
982 / / 29.08.2003
Несмотря на то, что тема успешно закрыта, я хочу вякнуть: а может, лучше использовать vector из STL? Получаем некоторые дополнительные удобства...
15K
02 августа 2006 года
casual
11 / / 18.03.2006
по-моему, человеку далеко еще до STL :)
да и просил ведь именно массив.
294
02 августа 2006 года
Plisteron
982 / / 29.08.2003
[QUOTE=casual]по-моему, человеку далеко еще до STL :) [/QUOTE]
Ничего, научится. Ковчег строил начинающий, а "Титаник" -- профессионалы.
[QUOTE=casual]да и просил ведь именно массив.[/QUOTE]
Может, он не знал, что надо спрашивать про std::vector?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог