powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Динамическое создание массива из элементов разных типов
22 сообщений из 22, страница 1 из 1
Динамическое создание массива из элементов разных типов
    #34541450
Lenie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача - сабж. Как в программе созадть двумерный массив из элементов (столбцов) разных типов. Количество стоблцов и строк аткже определяется во время выполнения программы. Помогите пжл.
...
Рейтинг: 0 / 0
Динамическое создание массива из элементов разных типов
    #34541464
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LenieЗадача - сабж. Как в программе созадть двумерный массив из элементов (столбцов) разных типов. Количество стоблцов и строк аткже определяется во время выполнения программы. Помогите пжл.
сделать класс CСell описывающие содержимое ячейки, потом с помощью stl::array загнать его в массив
я бы сделал так
...
Рейтинг: 0 / 0
Динамическое создание массива из элементов разных типов
    #34541481
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LenieЗадача - сабж. Как в программе созадть двумерный массив из элементов (столбцов) разных типов. Количество стоблцов и строк аткже определяется во время выполнения программы. Помогите пжл.

Отнаследовать классы (типы) столбцов от интерфейса. Создать массив указателей на интерфейсы. За счет полиморфизма они будут вести себя так как надо.

Саттер также рекомендует использовать массив из shared_ptr, которые будут хранить указатели на интерфейсы, т.к. стандарт с++ не декларирует того, что размеры указателей для разных типов будут одинаковы.
...
Рейтинг: 0 / 0
Динамическое создание массива из элементов разных типов
    #34541552
Lenie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cerebrum
сделать класс CСell описывающие содержимое ячейки, потом с помощью stl::array загнать его в массив
я бы сделал так

спасибо

условие - писать на чистом visual c++ без использования библиотек

есть мысль создать массив из типов variant... щас почитаю про этот тип...
...
Рейтинг: 0 / 0
Динамическое создание массива из элементов разных типов
    #34541562
Lenie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо

Akh
Отнаследовать классы (типы) столбцов от интерфейса. Создать массив указателей на интерфейсы. За счет полиморфизма они будут вести себя так как надо.

мне кажется это замудрено, или я ошибаюсь (опыта программирования у меня маловато)

Саттер также рекомендует использовать массив из shared_ptr
извиняюсь, кто такой Саттер?
, которые будут хранить указатели на интерфейсы, т.к. стандарт с++ не декларирует того, что размеры указателей для разных типов будут одинаковы.
...
Рейтинг: 0 / 0
Динамическое создание массива из элементов разных типов
    #34541574
VladimirP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Typedef struct {
int *iArr;
double *dArr;
} stArr, *pstArr;
Class TMyArr
{
protected:
int iN, iM;
public:
pstArr Arrays;
TMyArr ( int n, int m);
~TMyArr();
};
TMyArr::TMyArr( int n, int m)
{
iN = n;
iM = m;
Arrays = new pstArr [n];
for( int i=0; i< n; i++)
{
Arrays->iArr = new int [m];
Arrays->dArr = new double [m];
}
}
TMyArr::TMyArr( )
{
TMyArr( 5,6);
}
TMyArr::~TMyArr( )
{
for( int i=0; i< iN; i++)
{
delete [] Arrays->iArr ;
delete [] Arrays->dArr ;
}
delete [] Arrays;
}
// класс можно не использовать
//если надо писать на С а не на С++ то вместо new && delete используьте malloc && free
// идея должна быть понятна
//у меня возможны ошибки в написании не проверял просто идея
// определяете структуру в ней указатели на ваши элементы
// динамически получаете массив этих структур (строки) и в цикле в каждой структуре жинамически получаете массивы элементов (столбцы)
// когда стали не нужны, то освобождаете память
// обратный порядок в цикле освобождаете массивы элементов а эатем освобождаете массив структур
//
// класс написал длч понятности.
// расписывать дальше его не буду
//сами справитесь
...
Рейтинг: 0 / 0
Динамическое создание массива из элементов разных типов
    #34541650
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lenieспасибо

[quot Akh]
Отнаследовать классы (типы) столбцов от интерфейса. Создать массив указателей на интерфейсы. За счет полиморфизма они будут вести себя так как надо.

мне кажется это замудрено, или я ошибаюсь (опыта программирования у меня маловато)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
//Интерфейс
class ICell {
   public:
      virtual ~Cell() {};
      virtual void printCell() =  0 ;
};

//Реализация текстового
class CellText : public ICell {
   public:
      void setText(char const *text) {/*...*/};
      void printCell() {/**/};
};

//Реализация с картинкой
class CellImage : public ICell {
   public:
      void setImage(unsigned char const *bufImage) {/*...*/};
      void printCell() {/**/};
};

//Сам массив
Cell *(cells[ 2 ]);

//Функция использующая массив с объектами разного типа, но от одного интерфейса
void printCells() {
   for (int i= 0  ; i< 2  ; ++i)
     cells->printCell();
};

//Вся работа
int main() {
   //Создаем объекты
   CellText *text = new CellText();;
   CellImage *image = new CellImage();

   text->setTex("bla-bla");
   image->setImage(/*image*/);

   //Заностим в массив
   cells[ 0 ]=text;
   cells[ 1 ]=image;

   //Выводим на печать используя полиморфизм
   printCells();

   //Убиваем объекты
   delete cells[ 0 ];
   delete cells[ 1 ];

   //Усе
   return  0 ;
}

Не компилил.

Если, что не понятно, не стесняйся

Саттер также рекомендует использовать массив из shared_ptr
извиняюсь, кто такой Саттер?

Буржуйский знаток С++, книги напишет.
...
Рейтинг: 0 / 0
Динамическое создание массива из элементов разных типов
    #34541765
VladimirP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Основной класс обозвали ICell а обращаетесь к нему Cell.
На этапе компиляции ошибки = скорее всег описки или невнимательность.
А мой пример "какой вопрос такой ответ"
...
Рейтинг: 0 / 0
Динамическое создание массива из элементов разных типов
    #34541825
VladimirP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
//Интерфейс
class ICell {
public:
virtual ~ICell() {};
//virtual ~Cell() {};
virtual void printCell() = 0;
};

//Реализация текстового
class CellText : public ICell {
public:
void setText(char const *text) {/*...*/};
void printCell() {/**/};
};

//Реализация с картинкой
class CellImage : public ICell {
public:
void setImage(unsigned char const *bufImage) {/*...*/};
void printCell() {/**/};
};

//Сам массив
ICell *(cells[2]);
//Cell *(cells[2]);

//Функция использующая массив с объектами разного типа, но от одного интерфейса
void printCells() {
for (int i=0 ; i<2 ; ++i)
cells ->printCell();
//cells->printCell();
};

//Вся работа
int main() {
//Создаем объекты
CellText *text = new CellText();;
CellImage *image = new CellImage();

text->setText("bla-bla");
//text->setTex("bla-bla");
image->setImage("image");
//image->setImage(/*image*/);

//Заностим в массив
cells[0]=text;
cells[1]=image;

//Выводим на печать используя полиморфизм
printCells();

//Убиваем объекты
delete cells[0];
delete cells[1];

//Усе
return 0;
}

// компиляция прошла вникать не хочу
...
Рейтинг: 0 / 0
Динамическое создание массива из элементов разных типов
    #34541880
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladimirPОсновной класс обозвали ICell а обращаетесь к нему Cell.
На этапе компиляции ошибки = скорее всег описки или невнимательность.
А мой пример "какой вопрос такой ответ"

Опечатки, конечно. Показал смысл.
...
Рейтинг: 0 / 0
Динамическое создание массива из элементов разных типов
    #34542074
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkhСаттер также рекомендует использовать массив из shared_ptr, которые будут хранить указатели на интерфейсы, т.к. стандарт с++ не декларирует того, что размеры указателей для разных типов будут одинаковы.э? Вроде указатели на один и тот же интерфейс – одинаковые, во всяком случае, в вс можно явно указать тип наследования класса, хотя он должен сам определить.
...
Рейтинг: 0 / 0
Динамическое создание массива из элементов разных типов
    #34542795
Lenie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо, ценю помощь и получение полезной инф-ции.

Вот реализация:

union VALUE
{
unsigned ui_val;
int i_val;
unsigned short us_val;
short s_val;
unsigned char uc_val;
char c_val;
float f_val;
double d_val;
__int64 i64_val;
char *str_val;
};

VALUE **ar = new VALUE* [row_count];

for (int i = 0; i < row_count; i++)
ar = new VALUE [column_count];

ar [10][20].str_val = (char*) some_variable; // пример использования...

for (i = 0; i < row_count; i++)
delete [] ar ;

delete [] ar;
...
Рейтинг: 0 / 0
Динамическое создание массива из элементов разных типов
    #34543015
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LenieВсем спасибо, ценю помощь и получение полезной инф-ции.

Вот реализация:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
union VALUE
{
	unsigned    ui_val;
	int       i_val;
	unsigned short  us_val;
	short     s_val;
	unsigned char uc_val;
	char      c_val;
	float     f_val;
	double      d_val;
	__int64     i64_val;
	char      *str_val;
};

VALUE **ar = new VALUE* [row_count];

for (int i =  0 ; i < row_count; i++)
	ar [i] = new VALUE [column_count];

ar [ 10 ][ 20 ].str_val = (char*) some_variable;  // пример использования...

for (i =  0 ; i < row_count; i++)
	delete [] ar [i];

delete [] ar;


Интересный финт ушами. А как ты узнаешь, что за тип данных у тебя в ячейке?
...
Рейтинг: 0 / 0
Динамическое создание массива из элементов разных типов
    #34543197
Lenie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akh
Интересный финт ушами. А как ты узнаешь, что за тип данных у тебя в ячейке?

при заполнении массива я его буду знать

виновата О:-), должна была сказать об этом...
...
Рейтинг: 0 / 0
Динамическое создание массива из элементов разных типов
    #34543711
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если variant освоили, то можно посмотреть на профессиональную реализацию класса, который может содержать в себе значение любого типа (http://www.boost.org/doc/html/any.html).

Пример использования:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
// вектор 
std::vector<boost::any> v;

v.push_back(boost:any(std::string("hello"));
v.push_back(boost:any(int( 1999 ));

std::cout << boost::any_cast<std::string>(v[ 0 ]);
std::cout << boost::any_cast<int>(v[ 1 ]);
...
Рейтинг: 0 / 0
Динамическое создание массива из элементов разных типов
    #34543832
Lenie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Анатолий ШироковЕсли variant освоили, то можно посмотреть на профессиональную реализацию класса, который может содержать в себе значение любого типа (http://www.boost.org/doc/html/any.html).

Пример использования:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
// вектор 
std::vector<boost::any> v;

v.push_back(boost:any(std::string("hello"));
v.push_back(boost:any(int( 1999 ));

std::cout << boost::any_cast<std::string>(v[ 0 ]);
std::cout << boost::any_cast<int>(v[ 1 ]);


variant не освоила из-за альтернативного варианта с union, а за ответ - спасибо!
...
Рейтинг: 0 / 0
Динамическое создание массива из элементов разных типов
    #34543847
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lenievariant не освоила из-за альтернативного варианта с union, а за ответ - спасибо!А variant это по существу тот же самый union только с дополнительной обвязкой для удобства. В самом примитивном варианте будет примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
enum DATA_TYPES = {CHAR_TYPE, FLOAT_TYPE, INTEGER_TYPE, ..... etc};
struct VALUE {
	enum DATA_TYPES value_type;
	union DATA
	{
		unsigned    ui_val;
		int       i_val;
		unsigned short  us_val;
		short     s_val;
		unsigned char uc_val;
		char      c_val;
		float     f_val;
		double      d_val;
		__int64     i64_val;
		char      *str_val;
	}
};

ar [ 10 ][ 20 ].value_type = CHAR_TYPE;
ar [ 10 ][ 20 ].DATA.str_val = (char*) some_variable;
Все остальное точно как в твоем коде.
...
Рейтинг: 0 / 0
Динамическое создание массива из элементов разных типов
    #34543899
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
утгь еще внутрь структуры спрячь и изврат готов
...
Рейтинг: 0 / 0
Динамическое создание массива из элементов разных типов
    #34544537
Lenie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
blindedутгь еще внутрь структуры спрячь и изврат готов


если вам чем-то не нравится код, говорите пжл по существу, чистый гон не принимается

извините, но если бы я нормально знала язык, сюда бы не писала простые вещи...
...
Рейтинг: 0 / 0
Динамическое создание массива из элементов разных типов
    #34544639
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я говорю определение enum надо запихать внутрь struct. А не нравится одно - это стиль старого С, так писали 30 лет назад
...
Рейтинг: 0 / 0
Динамическое создание массива из элементов разных типов
    #34544691
Lenie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
blindedЯ говорю определение enum надо запихать внутрь struct. А не нравится одно - это стиль старого С, так писали 30 лет назад

понятно, спасибо
...
Рейтинг: 0 / 0
Динамическое создание массива из элементов разных типов
    #34546486
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blindedЯ говорю определение enum надо запихать внутрь struct. А не нравится одно - это стиль старого С, так писали 30 лет назадЗато он очень прост и идеально подходит для объяснения принципов.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Динамическое создание массива из элементов разных типов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]