Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
 
Izual
94 / 119 / 6
Регистрация: 13.11.2012
Сообщений: 1,551
#1

Переменное кол-во членов в структуре. Возможно ли? - C++

27.12.2013, 11:39. Просмотров 816. Ответов 15
Метки нет (Все метки)

Суть задачи - создать "хранилище данных", которое может изменять как свои члены ( по типу, например была 1-ая колонка char типов, а стало нужно int, при этом удалить старые ), так и размер членов ( например длину char массива ).
Как я понимаю структура не может дать мне желанной динамики, если так, то вопрос о реализации с помощью других способов.
Например как мне видится, использовать указатели как члены структуры, параллельно создать динамические массивы с определённым типом данных, и при необходимости использования увеличивать массив и добавлять новые данные ( например создаю заведомо массив char эл-ов, int и других )
При этом буду из структуры ссылаться на данные этих массивов.
Подскажите можно ли так?.. возможно если кому не лень кусочек кода с примерной реализацией.

Есть ещё один момент, кол-во строк контролировать можно, переопределением структуры, а кол-во эл-ов нет, как решить данный вопрос? Например указать безразмерный массив как член структуры, ссылающяяся на переменную, указывающую размер...

Подумал, если использовать typedef то можно так же и тип описывать, однако вопрос с количеством аргументов всё равно утруждает.

Добавлено через 19 часов 49 минут
Может просто работать массивами с опр типом создавать их динамически?.. Жаль такой код будет не прост в понимании в отличии от массивов...
Кстати подумал, может используя указатели совместить возможности динамических массивов, но ссылаться к элементам через структуру?(например содержащяя в себе тип переменной, имя и ссылку на реальный объект созданный динамически). Даже может через вложенные структуры. Или есть более подходящий способ работы с смешанными данными, определяемыми в кол-ве и качестве(типу и самим данным)? Может какие то методы пропустил.(кстати, если предлагаете классы, чего я не хочу делать, ибо со структурой мне лично легче работать, то описывайте разницу в возможностях, которая может стать решающей, если других методов не найдётся)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.12.2013, 11:39     Переменное кол-во членов в структуре. Возможно ли?
Посмотрите здесь:

Вывод определённого кол-ва знаков после запятой в структуре! - C++
Ребята,передо мной была поставлена задача,которую я решил,но теперь вот у меня возник вопрос! вот прога по структурам,которую я написал: ...

vector в структуре: возможно? - C++
могу ли я, объявляя структуру, написать так: struct A { vector<char> v; ......... }; ?

подсчёт кол-ва положительных членов - C++
подскажите пожалуйста, как реализовать вот что: имеется массив, заполненный случайными цифрами. нужно подсчичать кол-во положительных...

Возможно ли заполнить трехмерный массив с использованием меньшего кол-ва циклов? - C++
Добрый день. Требуется заполнить трехмерный массив следующим образом: 1 слой - единицами, 2 слой - двойками, 3 слой - тройками. ...

Переменное число аргументов - C++
Есть такой код. Хочу сделать, чтобы operator() принимал переменное число аргументов переменных типов. Т.е. передаём template<int,...

Переменное число аргументов - C++
РАСПАКОВКА есть ли способы кроме рекурсии и передачи как списка инициализации?

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dmitriy_M
1341 / 1222 / 112
Регистрация: 20.03.2009
Сообщений: 4,392
Записей в блоге: 11
27.12.2013, 12:12     Переменное кол-во членов в структуре. Возможно ли? #2
Читай про деревья.
Izual
94 / 119 / 6
Регистрация: 13.11.2012
Сообщений: 1,551
27.12.2013, 18:38  [ТС]     Переменное кол-во членов в структуре. Возможно ли? #3
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
Читай про деревья.
Вам скопировать текст из википедии?... Поясню:
Я умею создавать структуры и динамически переопределять их размер.
У меня проблема в том, что в определённый момент, мне нужно например изменить аргументы структуры, тип и значение присвоить. Структура я так понимаю таких возможностей не даёт, вот я и спрашиваю что даёт такую возможность.
Про дерево, даже с учётом примеров, не найдено решение динамического изменения аргументов, т.к. дерево основывается на опр типе данных аргументов, что уже не даёт решения поставленной головоломки.
Aloir
217 / 217 / 13
Регистрация: 17.12.2010
Сообщений: 689
27.12.2013, 21:41     Переменное кол-во членов в структуре. Возможно ли? #4
м, как насчет обычного вектора который содержит класс/структуру аргументов в твоей структуре? и потом на основе этих аргументов строится сама структура
Izual
94 / 119 / 6
Регистрация: 13.11.2012
Сообщений: 1,551
27.12.2013, 23:28  [ТС]     Переменное кол-во членов в структуре. Возможно ли? #5
Цитата Сообщение от Aloir Посмотреть сообщение
м, как насчет обычного вектора который содержит класс/структуру аргументов в твоей структуре? и потом на основе этих аргументов строится сама структура
Честно не очень люблю класс на вид, как и вектор(что является его составляющей), предпочитаю старый стиль структур.
Я так понимаю, вы мне описали мои предположения, по поводу вложенных структур, описывая новые переменные typedef enum методом, и исходя из типа засовывать переменные в тот или иной однородный массив, в самой структуре отсортированных(данных) будет храниться в каждом элементе - номер(или ссылка) к нужным данным.
А что по поводу кол-ва переменных в структуре? я же не могу(вроде бы) создать динамический массив как аргумент в структуре ? -или я ошибаюсь(тогда пруф плз)
Aloir
217 / 217 / 13
Регистрация: 17.12.2010
Сообщений: 689
28.12.2013, 04:02     Переменное кол-во членов в структуре. Возможно ли? #6
я предлагаю примерно так сделать:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
struct CObject{
 vector<CObjProper> properties;
 vector<CObjMember> members;
 ...
}
 
 
где CObjProper например
struct CObjProper{
 string Name;
 string(ENUM) Type;
 string Value;
 unsigned int Len;
 bool bNull;
 и т. п...
}
т.е
vector<CObjProper> - это список полей(свойств) описывающих текущую структуру
vector<CObjMember> - это членый структуры(переменные), где каждый член содержит 1 или несколько св-в из vector<CObjProper>.
CObjMember - единица структуры(переменная)

пс: вектор вам тут очень поможет, не будет таких проблем с выделением памяти.


как-то так, если я правильно понял задчу...
Izual
94 / 119 / 6
Регистрация: 13.11.2012
Сообщений: 1,551
28.12.2013, 16:00  [ТС]     Переменное кол-во членов в структуре. Возможно ли? #7
Цитата Сообщение от Aloir Посмотреть сообщение
я предлагаю примерно так сделать:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
struct CObject{
 vector<CObjProper> properties;
 vector<CObjMember> members;
 ...
}
 
 
где CObjProper например
struct CObjProper{
 string Name;
 string(ENUM) Type;
 string Value;
 unsigned int Len;
 bool bNull;
 и т. п...
}
т.е
vector<CObjProper> - это список полей(свойств) описывающих текущую структуру
vector<CObjMember> - это членый структуры(переменные), где каждый член содержит 1 или несколько св-в из vector<CObjProper>.
CObjMember - единица структуры(переменная)

пс: вектор вам тут очень поможет, не будет таких проблем с выделением памяти.


как-то так, если я правильно понял задчу...
Честно, смотрю и ничего не понимаю, т.к. недолюбливаю классы и естественно из за вкуса мозг его не воспринимает.
Суть моей так сказать инициативы было создать матрицу, с возможностью изменять кол-во строк и столбцов в нём, при этом чтоб так же можно было бы перед вводом и созданием данной - определять тип аргументов в каждой(допустим) колонке.
Честно ваш код мне не сильно помог, легче голову свернуть (лично мне так будет проще, т.к. знаю как буду выворачивать) в переопределениях указателей (хотя с указателями ещё особо не встречался) к вложенным десяткам структур описывающих типовые переменные.

Добавлено через 2 часа 9 минут
Частично я так понимаю что это вложенные структуры и примерно это - несколько переменных в объекте: тип, имя, значение. Это в вложенной структуре CObjProper.
Вектор, это как говорит яндекс на 2 месте по запросу "C++ вектор":
последовательность контейнеров, представляющие динамические массивы...
Только вы через структуру, а не через класс сделали, как в большинстве примеров к векторам..

Добавлено через 2 часа 3 минуты
Нарыл темку здесь на сайте: Как создать динамический массив структур?
Пишут в 7 посте:
Вектор возвращает ссылку на свой объект.
Если он возвращает ссылку на реальный объект - вы получаете доступ к этому объекту по этой ссылке.

Если он возвращает ссылку на указатель, который указывает на реальный объект, то вы получаете доступ к объекту через ссылку, которая указывает на указатель, который указывает на объект - итого оверхед адресации.

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

Поэтому, если по задаче перемещать объекты туда-сюда не нужно, лучше просто хранить в векторе сам объект.
...
Dmitriy_M
1341 / 1222 / 112
Регистрация: 20.03.2009
Сообщений: 4,392
Записей в блоге: 11
28.12.2013, 17:32     Переменное кол-во членов в структуре. Возможно ли? #8
Цитата Сообщение от Izual Посмотреть сообщение
Я умею создавать структуры и динамически переопределять их размер.
У меня проблема в том, что в определённый момент, мне нужно например изменить аргументы структуры, тип и значение присвоить. Структура я так понимаю таких возможностей не даёт, вот я и спрашиваю что даёт такую возможность.
Про дерево, даже с учётом примеров, не найдено решение динамического изменения аргументов, т.к. дерево основывается на опр типе данных аргументов, что уже не даёт решения поставленной головоломки.
На деревьях построены множество современных СУБД. То что вы не знаете АТД недочет вашего образования. Динамика позволяет иметь узлы дерева любого типа.
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
28.12.2013, 19:22     Переменное кол-во членов в структуре. Возможно ли? #9
Aloir, предложенный вами вариант слишком сложен и требует переписывания существующих классов, чтобы их можно было хранить в вашем хранилище.

Dmitriy_M, деревья никоем образом не решают задачу хранения гетерогенных значений.

Izual, как бы вы не старались на Си у вас получится невнятная типонебезопасная лапша. На С++ написать адекватное решение шансов больше, к примеру можете посмотреть в сторону std::tuple. Вот вам пример: http://ideone.com/carVr0.
gazlan
3130 / 1905 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
28.12.2013, 19:45     Переменное кол-во членов в структуре. Возможно ли? #10
Цитата Сообщение от Izual Посмотреть сообщение
создать матрицу, с возможностью изменять кол-во строк и столбцов
Динамический массив, элементы которого также динамические массивы. Тип аргумента неважен и может быть своим у каждого элемента коллекции. Если требуется "прямоугольность", допишете еще код контроля вставки/удаления одновременно во все колонки (построчно). Если элементов немного, вместо динамического массива можно использовать список.
Izual
94 / 119 / 6
Регистрация: 13.11.2012
Сообщений: 1,551
28.12.2013, 22:59  [ТС]     Переменное кол-во членов в структуре. Возможно ли? #11
Динамический массив, элементы которого также динамические массивы.
Так и надо, только чтоб к ним удобно можно было бы обращяться, как к членам структуры.
Тип аргумента неважен и может быть своим у каждого элемента коллекции.
Если реализовывать структуры в структуре то так и можно сделать, при этом дочерняя структура собирает все переменные, а главная к ним обращяется, получая тип, №ij и данные.
Если требуется "прямоугольность", допишете еще код контроля вставки/удаления одновременно во все колонки (построчно). Если элементов немного, вместо динамического массива можно использовать список.
Ну я думаю отталкиваться от кол-ва строк и столбцов как 2-ух чисел, на основе их - динамически создавать массив структур, соответсвующюю кол-ву строк. А кол-во столбцов, должно быть описанно как число, на котором основывается кол-во аргументов род. структуры (хотябы ссылки родительской структуры на дочернюю).
gazlan
3130 / 1905 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
28.12.2013, 23:33     Переменное кол-во членов в структуре. Возможно ли? #12
Вы бы определились: "шашечки или ехать".

Структура - это указание на фиксированный сдвиг адресов, известный до компиляции. Если вы можете заранее статически описать эту таблицу, никакие динамические массивы уже не нужны.

И наоборот, если это невозможно сделать статически, то и представление объекта должно быть динамическим.

В C есть все для удобной работы с указателями. Попытка описать работу с натурально динамическим типом как с псевдостатическим, выглядит, на мой взгляд, как стремление задней левой ногой почесать правое ухо.
Izual
94 / 119 / 6
Регистрация: 13.11.2012
Сообщений: 1,551
29.12.2013, 02:31  [ТС]     Переменное кол-во членов в структуре. Возможно ли? #13
Цитата Сообщение от gazlan Посмотреть сообщение
Вы бы определились: "шашечки или ехать".

Структура - это указание на фиксированный сдвиг адресов, известный до компиляции. Если вы можете заранее статически описать эту таблицу, никакие динамические массивы уже не нужны.

И наоборот, если это невозможно сделать статически, то и представление объекта должно быть динамическим.

В C есть все для удобной работы с указателями. Попытка описать работу с натурально динамическим типом как с псевдостатическим, выглядит, на мой взгляд, как стремление задней левой ногой почесать правое ухо.
Вы углубляете в мне лично не нужные факты о том что структура структурированна таким образом, что ячейки смежны между переменными, что облегчает вычислительные процессы, т.к. адрес вычисляется быстрее... Но мне структура нужна для "красоты кода", т.е. просто объединить данные одним полем (именем структуры).
Статически не могу, потому и спрашиваю как лучше сделать, при этом не ударяясь желательно в классы и производные от них, т.к. читабильность кода с использованием классов очень тяжела, именно из за классов многие программисты останавливаются как показала практика.
Динамический массив указателей можно в структуру засунуть? ( если нет, то как тогда мне кол-во столбцов сделать динамическим? )
gazlan
3130 / 1905 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
29.12.2013, 03:15     Переменное кол-во членов в структуре. Возможно ли? #14
Цитата Сообщение от Izual Посмотреть сообщение
именно из-за классов многие программисты останавливаются
OOP - именно способ снижения сложности за счет декомпозиции. Понятно, что количество Мирового Зла неизменно, но иногда бывает выгодно обменять одни проблемы на другие.

Сентенция о "красоте кода" мне осталась непонятной. Мнимая разница между структурой и классом - только дань обратной совместимости (видимость членов по умолчанию). Назовете вы это структрой или классом, не имеет ни малейшего значения.

"Засунуть" можно и массив в структуру и структуру в массив, и LoL (List of Lists) столь древняя вещь, что была известна, наверное, еще в Древнем Вавилоне. Контейнеры для того и существуют, чтобы помещать в них другие вещи, в том числе, и другие контейнеры. Использование для списка двух отдельных малоразличимых сущностей - структуры и массива - просто уступка оптимизации.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2013, 16:02     Переменное кол-во членов в структуре. Возможно ли?
Еще ссылки по теме:

Переменное число параметров шаблона - C++
Здоровеньки булы. Не уверен, что название темы точно отражает суть вопроса. Есть заготовка шаблонного делегата, параметры которого -...

Переменное количество аргументов в функции ( зацикливание ) - C++
Здравствуйте. Подскажите пожалуйста как правильно огранизировать доступ к каждому параметру. Заранее спасибо. Вот код: #include...

Можно ли в цикле for устанавливать переменное значение инициализатора? - C++
Ну вот мне позарез надо сделать так: int j=(23-posl); for (i=j;i&gt;=0;i--) cout &lt;&lt; c; так нельзя? а мне очень нужно. что можно...

Переменное число параметров функции - трабл с int - C++
Функция - выводит среднее арифметическое своих аргументов. Рабочий пример с double: #include &lt;cstdarg&gt; #include &lt;iostream&gt; double...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Izual
94 / 119 / 6
Регистрация: 13.11.2012
Сообщений: 1,551
29.12.2013, 16:02  [ТС]     Переменное кол-во членов в структуре. Возможно ли? #15
Цитата Сообщение от gazlan Посмотреть сообщение
OOP - именно способ снижения сложности за счет декомпозиции. Понятно, что количество Мирового Зла неизменно, но иногда бывает выгодно обменять одни проблемы на другие.

Сентенция о "красоте кода" мне осталась непонятной. Мнимая разница между структурой и классом - только дань обратной совместимости (видимость членов по умолчанию). Назовете вы это структрой или классом, не имеет ни малейшего значения.

"Засунуть" можно и массив в структуру и структуру в массив, и LoL (List of Lists) столь древняя вещь, что была известна, наверное, еще в Древнем Вавилоне. Контейнеры для того и существуют, чтобы помещать в них другие вещи, в том числе, и другие контейнеры. Использование для списка двух отдельных малоразличимых сущностей - структуры и массива - просто уступка оптимизации.
1. Изменно, т.к. чем меньше людей подвержены как указывает ваша подписка из библии, неразумности, тем меньше зла (как не правильных действий, причиной появления которых служит не совершенный способ познания мира и соотв. самих знаний). Менять шило на мыло, это как выгребать воду черпаком из дырявой лодки, вместо того чтоб заделать течь.
2. На первой странице у человека такая подписка:
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. Мартин Фаулер
С чем я полностью согласен, потому я и делаю код таким, чтоб он был понятен, если например потребуется его изменить через 2 года, но вы уже не помните где куда прикручено. К тому же, как я прежде говорил простота в обращении к структурам несоизмерима по сравнению с грамматикой классов.(намного проще обращяться через точку, нежели через всякие стрелочки, двоеточия и т.п. муть, которую не то что не запомниш, не поймёш даже).
А раз уж разницы нет, то тем более, буду структуры и дальше использовать, дабы не забивать насущными "профессиональными" проблемами голову.
3. По поводу Вавилона, лучше промолчу, туда же, раз был в контексте упамянут Список в принадлежности...
А вот структура в структуре очень актуальная вещь, только вот пока что всё таки не ясно как организовать реально динамический способ задания кол-ва эл-ов и обращения к ним (возможно придётся всё же динамическую матрицу делать), а в структуре хранить (указатели)адреса к ним(для удобства обращения к эл-ам).
Хотя с указателями будет запара, т.к. удобная форма изменения переменных в структуре будет потеряна, и придётся писать отдельную функцию для изменения переменной в матрице, а потом уже и корректировка указателя(хотя пока что знаний про указатели не хватает, ну буду штрудировать, тем более что выход как я вижу не богат, уж лучше так имхо, чем заморачиваться векторами и классами, хотя я и без знаний основных принципов ООП их так сказать реализую через нутро).

П.С. Всем большое спасибо за объяснения, но всё же хочу вернуться к теме, а именно к структуре и динамическим изменением её членов...
Yandex
Объявления
29.12.2013, 16:02     Переменное кол-во членов в структуре. Возможно ли?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru