Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Двумерный динамический массив 
:(
    Опции темы
Гость_=Женек=
Дата 1.10.2005, 13:31 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered












Господа!

Передо мной стоит следующая задача: мне нужно создать двухмерный массив из AnsiString, размеры которого я
заранее не знаю. То есть его нужно объявить, а потом добавлять в него строки по мере необходимости.

Можете конечно отослать меня к мануалу и поиску - я искал. Но везде люди предлагают коды в которых непосредственно перед созданием массива его размер все-таки вычисляется.
Многие предлагают не изобретать велосипед и использовать ListView. Этого тоже не надо делать, подчеркиваю, мне нужен двухмерный массив.


Заранее спасибо за помощь.

  Вверх
chaos
Дата 3.10.2005, 07:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 1
Всего: 44



вот тебе пример не большой smile

Код

#include <iostream>
#include <vector>
using namespace std;

typedef vector<AnsiString> TCNTANSISTRING;
typedef vector<TCNTANSISTRING> TCNTCNTANSISTRING;

int main(int argc, char* argv[])
{
    TCNTANSISTRING cntAnsiString;
    TCNTCNTANSISTRING cntMatrixAnsiString;
    char str[10];

    for (int iRand1 = 0; iRand1 < rand(); iRand1++)
    {
        for (int iRand2 = 0; iRand2 < rand(); iRand2++)
        {
            sprintf(str, "%d", rand());
            cntAnsiString.push_back(str);
        }
        cntMatrixAnsiString.push_back(cntAnsiString);
    }

    TCNTCNTANSISTRING::iterator itOuter = cntMatrixAnsiString.begin();
    TCNTANSISTRING::iterator itInner;
    for ( ; itOuter != cntMatrixAnsiString.end(); ++itOuter)
    {
        itInner = itOuter->begin();
        for ( ; itInner != itOuter->end(); ++itInner)
            cout << itInner.c_str() << " ";
        cout << endl;
    }
    return 0;
}

ЗЫ не компилял, могут быть ошибки smile

Это сообщение отредактировал(а) chaos - 3.10.2005, 08:27
PM WWW   Вверх
chaos
Дата 3.10.2005, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 1
Всего: 44



да и еще, rand() надо змаенить более подходящим, тк функция может возвращать большие значения smile
PM WWW   Вверх
Artemon
Дата 7.10.2005, 07:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 7
Всего: 20



chaos, а твой код-то немного не соответствует требованиям гостя, он ведь просил массив, а не вектор.


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
chaos
Дата 7.10.2005, 08:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 1
Всего: 44



Цитата(Artemon @ 7.10.2005, 07:19)
chaos, а твой код-то немного не соответствует требованиям гостя, он ведь просил массив, а не вектор.

и че? вектор это тот же "массив" только по умнее банального указателя
Если его не устраивает пускай пишет так:
Код

int iR1 = rand(), iR2 = rand();
AnsiString **cntAnsiString;

*cntAnsiString = new AnsiString[iR1];
for (int i = 0; i < iR1; i++)
    cntAnsiString[i] = new AnsiString[iR2];

....

for (int i = 0; i < iR1; i++)
    delete[] cntAnsiString[i];
delete[] cntAnsiString;


но возникает проблема: если необходимо сделать массив не прямоугольный(пример ниже) то необходимо еще гдето хранить кол-во элементом. Так что на мой взгляд вектор самое подходящая вещь!!!
PM WWW   Вверх
Artemon
Дата 10.10.2005, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 7
Всего: 20



А что ты скажешь на счет такой "приятной", мелочи как распределение памяти у вектора?


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0504 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.