143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|
1 | |
Переменное кол-во членов в структуре. Возможно ли?27.12.2013, 11:39. Показов 1622. Ответов 15
Метки нет (Все метки)
Суть задачи - создать "хранилище данных", которое может изменять как свои члены ( по типу, например была 1-ая колонка char типов, а стало нужно int, при этом удалить старые ), так и размер членов ( например длину char массива ).
Как я понимаю структура не может дать мне желанной динамики, если так, то вопрос о реализации с помощью других способов. Например как мне видится, использовать указатели как члены структуры, параллельно создать динамические массивы с определённым типом данных, и при необходимости использования увеличивать массив и добавлять новые данные ( например создаю заведомо массив char эл-ов, int и других ) При этом буду из структуры ссылаться на данные этих массивов. Подскажите можно ли так?.. возможно если кому не лень кусочек кода с примерной реализацией. Есть ещё один момент, кол-во строк контролировать можно, переопределением структуры, а кол-во эл-ов нет, как решить данный вопрос? Например указать безразмерный массив как член структуры, ссылающяяся на переменную, указывающую размер... Подумал, если использовать typedef то можно так же и тип описывать, однако вопрос с количеством аргументов всё равно утруждает. Добавлено через 19 часов 49 минут Может просто работать массивами с опр типом создавать их динамически?.. Жаль такой код будет не прост в понимании в отличии от массивов... Кстати подумал, может используя указатели совместить возможности динамических массивов, но ссылаться к элементам через структуру?(например содержащяя в себе тип переменной, имя и ссылку на реальный объект созданный динамически). Даже может через вложенные структуры. Или есть более подходящий способ работы с смешанными данными, определяемыми в кол-ве и качестве(типу и самим данным)? Может какие то методы пропустил.(кстати, если предлагаете классы, чего я не хочу делать, ибо со структурой мне лично легче работать, то описывайте разницу в возможностях, которая может стать решающей, если других методов не найдётся)
0
|
27.12.2013, 11:39 | |
Ответы с готовыми решениями:
15
Передача в функцию переменное кол-во аргументов Вывод определённого кол-ва знаков после запятой в структуре! Создайте функцию, которая принимает переменное количество входных аргументов и возвращает переменное количество выходных Создайте функцию, которая принимает переменное количество входных аргументов и возвращает переменное количество |
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|
27.12.2013, 18:38 [ТС] | 3 |
Вам скопировать текст из википедии?... Поясню:
Я умею создавать структуры и динамически переопределять их размер. У меня проблема в том, что в определённый момент, мне нужно например изменить аргументы структуры, тип и значение присвоить. Структура я так понимаю таких возможностей не даёт, вот я и спрашиваю что даёт такую возможность. Про дерево, даже с учётом примеров, не найдено решение динамического изменения аргументов, т.к. дерево основывается на опр типе данных аргументов, что уже не даёт решения поставленной головоломки.
0
|
224 / 224 / 38
Регистрация: 17.12.2010
Сообщений: 713
|
|
27.12.2013, 21:41 | 4 |
м, как насчет обычного вектора который содержит класс/структуру аргументов в твоей структуре? и потом на основе этих аргументов строится сама структура
0
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|
27.12.2013, 23:28 [ТС] | 5 |
Честно не очень люблю класс на вид, как и вектор(что является его составляющей), предпочитаю старый стиль структур.
Я так понимаю, вы мне описали мои предположения, по поводу вложенных структур, описывая новые переменные typedef enum методом, и исходя из типа засовывать переменные в тот или иной однородный массив, в самой структуре отсортированных(данных) будет храниться в каждом элементе - номер(или ссылка) к нужным данным. А что по поводу кол-ва переменных в структуре? я же не могу(вроде бы) создать динамический массив как аргумент в структуре ? -или я ошибаюсь(тогда пруф плз)
0
|
224 / 224 / 38
Регистрация: 17.12.2010
Сообщений: 713
|
||||||
28.12.2013, 04:02 | 6 | |||||
я предлагаю примерно так сделать:
vector<CObjProper> - это список полей(свойств) описывающих текущую структуру vector<CObjMember> - это членый структуры(переменные), где каждый член содержит 1 или несколько св-в из vector<CObjProper>. CObjMember - единица структуры(переменная) пс: вектор вам тут очень поможет, не будет таких проблем с выделением памяти. как-то так, если я правильно понял задчу...
0
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|
28.12.2013, 16:00 [ТС] | 7 |
Честно, смотрю и ничего не понимаю, т.к. недолюбливаю классы и естественно из за вкуса мозг его не воспринимает.
Суть моей так сказать инициативы было создать матрицу, с возможностью изменять кол-во строк и столбцов в нём, при этом чтоб так же можно было бы перед вводом и созданием данной - определять тип аргументов в каждой(допустим) колонке. Честно ваш код мне не сильно помог, легче голову свернуть (лично мне так будет проще, т.к. знаю как буду выворачивать) в переопределениях указателей (хотя с указателями ещё особо не встречался) к вложенным десяткам структур описывающих типовые переменные. Добавлено через 2 часа 9 минут Частично я так понимаю что это вложенные структуры и примерно это - несколько переменных в объекте: тип, имя, значение. Это в вложенной структуре CObjProper. Вектор, это как говорит яндекс на 2 месте по запросу "C++ вектор": последовательность контейнеров, представляющие динамические массивы... Только вы через структуру, а не через класс сделали, как в большинстве примеров к векторам.. Добавлено через 2 часа 3 минуты Нарыл темку здесь на сайте: Как создать динамический массив структур? Пишут в 7 посте:
0
|
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
|
|
28.12.2013, 19:22 | 9 |
Aloir, предложенный вами вариант слишком сложен и требует переписывания существующих классов, чтобы их можно было хранить в вашем хранилище.
Dmitriy_M, деревья никоем образом не решают задачу хранения гетерогенных значений. Izual, как бы вы не старались на Си у вас получится невнятная типонебезопасная лапша. На С++ написать адекватное решение шансов больше, к примеру можете посмотреть в сторону std::tuple. Вот вам пример: http://ideone.com/carVr0.
0
|
28.12.2013, 19:45 | 10 |
Динамический массив, элементы которого также динамические массивы. Тип аргумента неважен и может быть своим у каждого элемента коллекции. Если требуется "прямоугольность", допишете еще код контроля вставки/удаления одновременно во все колонки (построчно). Если элементов немного, вместо динамического массива можно использовать список.
0
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|
28.12.2013, 22:59 [ТС] | 11 |
0
|
28.12.2013, 23:33 | 12 |
Вы бы определились: "шашечки или ехать".
Структура - это указание на фиксированный сдвиг адресов, известный до компиляции. Если вы можете заранее статически описать эту таблицу, никакие динамические массивы уже не нужны. И наоборот, если это невозможно сделать статически, то и представление объекта должно быть динамическим. В C есть все для удобной работы с указателями. Попытка описать работу с натурально динамическим типом как с псевдостатическим, выглядит, на мой взгляд, как стремление задней левой ногой почесать правое ухо.
1
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|
29.12.2013, 02:31 [ТС] | 13 |
Вы углубляете в мне лично не нужные факты о том что структура структурированна таким образом, что ячейки смежны между переменными, что облегчает вычислительные процессы, т.к. адрес вычисляется быстрее... Но мне структура нужна для "красоты кода", т.е. просто объединить данные одним полем (именем структуры).
Статически не могу, потому и спрашиваю как лучше сделать, при этом не ударяясь желательно в классы и производные от них, т.к. читабильность кода с использованием классов очень тяжела, именно из за классов многие программисты останавливаются как показала практика. Динамический массив указателей можно в структуру засунуть? ( если нет, то как тогда мне кол-во столбцов сделать динамическим? )
0
|
29.12.2013, 03:15 | 14 |
OOP - именно способ снижения сложности за счет декомпозиции. Понятно, что количество Мирового Зла неизменно, но иногда бывает выгодно обменять одни проблемы на другие.
Сентенция о "красоте кода" мне осталась непонятной. Мнимая разница между структурой и классом - только дань обратной совместимости (видимость членов по умолчанию). Назовете вы это структрой или классом, не имеет ни малейшего значения. "Засунуть" можно и массив в структуру и структуру в массив, и LoL (List of Lists) столь древняя вещь, что была известна, наверное, еще в Древнем Вавилоне. Контейнеры для того и существуют, чтобы помещать в них другие вещи, в том числе, и другие контейнеры. Использование для списка двух отдельных малоразличимых сущностей - структуры и массива - просто уступка оптимизации.
0
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|
29.12.2013, 16:02 [ТС] | 15 |
1. Изменно, т.к. чем меньше людей подвержены как указывает ваша подписка из библии, неразумности, тем меньше зла (как не правильных действий, причиной появления которых служит не совершенный способ познания мира и соотв. самих знаний). Менять шило на мыло, это как выгребать воду черпаком из дырявой лодки, вместо того чтоб заделать течь.
2. На первой странице у человека такая подписка: А раз уж разницы нет, то тем более, буду структуры и дальше использовать, дабы не забивать насущными "профессиональными" проблемами голову. 3. По поводу Вавилона, лучше промолчу, туда же, раз был в контексте упамянут Список в принадлежности... А вот структура в структуре очень актуальная вещь, только вот пока что всё таки не ясно как организовать реально динамический способ задания кол-ва эл-ов и обращения к ним (возможно придётся всё же динамическую матрицу делать), а в структуре хранить (указатели)адреса к ним(для удобства обращения к эл-ам). Хотя с указателями будет запара, т.к. удобная форма изменения переменных в структуре будет потеряна, и придётся писать отдельную функцию для изменения переменной в матрице, а потом уже и корректировка указателя(хотя пока что знаний про указатели не хватает, ну буду штрудировать, тем более что выход как я вижу не богат, уж лучше так имхо, чем заморачиваться векторами и классами, хотя я и без знаний основных принципов ООП их так сказать реализую через нутро). П.С. Всем большое спасибо за объяснения, но всё же хочу вернуться к теме, а именно к структуре и динамическим изменением её членов...
0
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|
31.12.2013, 02:51 [ТС] | 16 |
В рое тем, отыскал одну Как создать динамический массив структур?
где есть интересные фразы:
0
|
31.12.2013, 02:51 | |
31.12.2013, 02:51 | |
Помогаю со студенческими работами здесь
16
vector в структуре: возможно? подсчёт кол-ва положительных членов Составить программу вычисления N- кол-ва членов числовой последовательност Определить кол-во членов последовательности являющихся удвоенными не четными числами Определить кол-во членов последовательности являющихся квадратами четных чисел Даны натуральные числа n, a1., an. Определить кол-во членов ak последовательности a1,.an удовлетворяющих условию ai<5 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |