Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамическое создание переменных, Возможно ли такое? 
V
    Опции темы
ImmS
Дата 6.1.2009, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 6.1.2007

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



Доброго времени суток, задача стоит такая: нужно создать N блоков размером n, и M блоков размером m...колличество блоков и их размер заранее не известны(вычисляются в программе). Т.е. по сути создаем сколько-то массивов какой-то длинны (как-то не красиво зато сама суть). Задача похожая на динамически создаваемые объекты, вот только там сначала создается объект, а потом ему дается имя. А вот как в цикле создать переменную ума не приложу....или может есть еще какой-то выход(кроме использования объектов в качестве таких массивов)?
PM MAIL ICQ   Вверх
newalex
Дата 6.1.2009, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 15.11.2005

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



Ключевые слова для поиска: динамический массив, new, delete.
std::vector
PM MAIL   Вверх
ImmS
Дата 6.1.2009, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 6.1.2007

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



Все в порядке если писать ручками, например:
Код

int *A, *B, *C;
A = new int[5];
B = new int[6];
C = new int[5];


А если я не знаю, будет 3 массива или 4, или 50?
Или что-то не уловил в ответе?
PM MAIL ICQ   Вверх
Dmi3ev
Дата 6.1.2009, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 16
Всего: 41



Цитата

А если я не знаю, будет 3 массива или 4, или 50?

можно создать вот так.
Код

double **a;
a=new double* [m];
for (int i=0; i<m; i++)
 a[i]=new double [n];

здесь m и n переменные, можно ведь по разному выделять память. Здесь неясно заранее сколько массивов, а можно потом менять размер выделенной памяти . это по твоему примеру. а можно и векторами пользоваться push_back, как говорит  newalex


--------------------

PM MAIL   Вверх
Den64
Дата 6.1.2009, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 6.4.2006
Где: Курск

Репутация: нет
Всего: 2



Используй динамические структуры, например линейный список.
--------------------
Инагда пишу звуками.
PM WWW ICQ   Вверх
ImmS
Дата 7.1.2009, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 6.1.2007

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



Всем спасибо, заработало...вот только читал, читал про std::vector и push_back() ...так до конца и не понял как оно работает...можно краткий курс?smile если не сложно с простеньким примерчиком...
PM MAIL ICQ   Вверх
Dmi3ev
Дата 7.1.2009, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 16
Всего: 41



Код

//---------------------------------------------------------------------------

#include <iostream.h>
#include <vector.h>
#include <algorithm>
using namespace std;
//---------------------------------------------------------------------------
int main()
{
vector<int> a;
cout<<"Size before:"<<a.size()<<endl;
for (int i=0; i<5; i++)
 a.push_back(4-i);
cout<<"Size after:"<<a.size()<<endl;
cout<<"before sort:"<<endl;
for (int i=0; i<a.size(); i++)
 cout<<a[i]<<"; ";
sort(a.begin(), a.end());
cout<<endl<<"after sort:"<<endl;
for (int i=0; i<a.size(); i++)
 cout<<a[i]<<"; ";
a.resize(10);
cout<<endl<<"after resize1:"<<endl;
for (int i=0; i<a.size(); i++)
 cout<<a[i]<<"; ";
a.resize(5);
cout<<endl<<"after resize2:"<<endl;
for (int i=0; i<a.size(); i++)
 cout<<a[i]<<"; ";
a.resize(10, 7);
cout<<endl<<"after resize3:"<<endl;
for (int i=0; i<a.size(); i++)
 cout<<a[i]<<"; ";
vector<int>::iterator i;
cout<<endl;
cout<<"out with iterator:"<<endl;
for (i=a.begin(); i!=a.end(); i++)
 cout<<*i<<"; ";
cout<<endl;
a.erase(a.begin(), a.end()-1);
for (i=a.begin(); i!=a.end(); i++)
 cout<<*i<<"; ";
cout<<endl;
system("pause");
        return 0;
}
//---------------------------------------------------------------------------

вот примерчик


--------------------

PM MAIL   Вверх
ImmS
Дата 8.1.2009, 02:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 6.1.2007

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



Всем большое спасибо за помощь...утопал разбираться...
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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