Можно ли создать массив в котором с 0 по 4 элемент будут храниться double, с 5 по 9 будут храниться int и т.д.?10.08.2019, 23:35. Показов 9749. Ответов 119
Метки структурные массивы (Все метки)
Такой вопрос: я хочу создать одномерный массив в котором с 0 по 4 элемент будут храниться double, с 5 по 9 будут храниться bool, с 10 по 14 будет храниться int. Я видел пример со структурами как раз на этом форуме, но я потерял ссылку на сайт? Можно ли создать такой массив и какими способами?
0
|
|
| 10.08.2019, 23:35 | |
|
Ответы с готовыми решениями:
119
Создать базу из трех сотрудников, где будут храниться их имена Можно ли в com-сервере создать массив в котором будут храниться данные какое-то время Создать массив, содержащий массивы, которые, в свою очередь, содержат массивы, в которых уже будут храниться различные типы данных |
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||
| 12.08.2019, 18:16 | ||||||
|
а у меня терпение заканчивается. для меня загадка: вот как ты мог так умыдриться понять? я спрошу тебя ещё раз: что ты пытаешься донести этими вопросами? что у элемента массива статический размер, который зависит от типа массива? и что? что из этого следует? что массив - априори однородный? нет, не следует. ты вообще понял смысл вот этой вот фразы? которые иллюстрируют это положение на практике. ты этот код видел? понял принцип действия? ты понял, как работает код? ты осознал, что в массив действительно можно напихать всё что угодно, помимо объектов формального типа его элементов?
0
|
||||||
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
|
||
| 12.08.2019, 18:28 | ||
|
hoggy, я так понял отвечать не будешь
ибо это разрушает твой постулат:"массив из разных типов"
1
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||
| 12.08.2019, 18:40 | ||||
|
Добавлено через 2 минуты ты начинаешь раздражать своей неспособностью понять простые вещи такое впечатление, что ты какой то альтернативно-одаренный сказочный эльф.
0
|
||||
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
|
|||||
| 12.08.2019, 19:06 | |||||
|
Добавлено через 2 минуты особенно где написан вот этот кусок
1
|
|||||
|
Комп_Оратор)
|
|
| 12.08.2019, 19:56 | |
|
ValeryS, тут всё бестолку. Разные типы и структура в которой могут быть разные типы не отличимы для того кто не желает отличать.
Безотносительно к тому, что union не имеет отношения к формулировке вопроса: Сам приём известен. Вообще, при жестких ограничениях в памяти это выход, но он не бесплатен. И хуже всего, то что вместо контейнера полиморфных указателей получается контейнер объединений. Размер соответствует максимальному размеру вариативного типа. И если придётся прикручивать тип который больше максимального, то придётся перекомпилировать весь проект от начала и до конца, везде где такой массив присутствует. Но профи рулят.
1
|
|
|
96 / 82 / 22
Регистрация: 19.10.2013
Сообщений: 485
|
||
| 12.08.2019, 20:03 | ||
|
0
|
||
|
611 / 416 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
|
||
| 12.08.2019, 20:44 | ||
|
0
|
||
|
602 / 439 / 137
Регистрация: 22.11.2017
Сообщений: 1,407
|
||
| 12.08.2019, 21:17 | ||
|
std::optional<T> это значение типа T в обёртке при поднятом флаге или упавший флаг. std::any это значение любого типа, класса, структуры или отсутствие такового.
0
|
||
|
611 / 416 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
|
|
| 12.08.2019, 21:46 | |
|
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||||||||||
| 12.08.2019, 23:17 | |||||||||||||||
|
"элементами массива могут быть объекты разного типа" ? вот тебе простой пример без union, без variant, и даже без any:
невзирая на наличие рабочих кодов, так и не вразуметь: формальный тип массива - лишь формальность. он может хранить объекты любых типов, какие в него засунет программист. главное, что бы места в массиве хватило. можно вообще закладывать объекты принципиально несовместимых типов, смысл не измениться на на йоту. так в примере выше использовался массив base array[3];с тем же успехом можно использовать массив обычных чаров.
в один момент времени только один из членов union может быть активным. это значит, что в один момент времени union хранит либо bool, либо int, либо ещё что ты хочешь использовать. и именно для этой цели: хранить объекты разных типов, и завезли union в язык. я так понял, причина твоих заблуждений в том, что ты тупо не знаешь элементарных вещей. мой тебе совет: прежде чем нести всякую чушь, лучше выучи сначала язык.
1
|
|||||||||||||||
|
96 / 82 / 22
Регистрация: 19.10.2013
Сообщений: 485
|
|||||||||||||||||
| 13.08.2019, 00:03 | |||||||||||||||||
![]()
И ещё одного:
Кстати, этот паттерн применяется при построении AST деревьев: https://github.com/qt-creator/... AST.h#L126 Добавлено через 7 минут Ну и чтобы совсем всё было честно:
0
|
|||||||||||||||||
|
Комп_Оратор)
|
|
| 13.08.2019, 00:45 | |
|
ValeryS, посмотрите какая красота - массив указателей на базовый класс... Не смартов, но годится. При чём тут разные типы с 0 по 4 и с 5 по 9 - оставим. Бог с ним. Главное, - массовость алгоритма. Вместо нескольких массивов мы имеем необходимость при итерации пользоваться либо динамической идентификацией либо самодельными идентификаторами за пределами типа. То есть как в С на уровне данных :
isInt() и всё ок! А вы спрашиваете как обеспечить массовость на уровне предикат. Сортировка... Поиск... Чушь. Улыбка - идёт идиотам. Дебилам идёт серьезно-мрачное выражение. Аватаров много - суть одна. Вот такой полиморфизм.
1
|
|
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
|
|||||||
| 13.08.2019, 05:59 | |||||||
ТИП - самостоятельная единица, не чар, не инт, не ворд, а объединение запихать в него можно все что угодно, но он от этого не станет ни чаром, ни интом, ни вордом, а останется объединением а то что туда засунуто это уже другой вопрос если я объявлю массив int arr[1]; а запихаю туда float(благо размер позволяет), это что станет массив float?
0
|
|||||||
|
602 / 439 / 137
Регистрация: 22.11.2017
Сообщений: 1,407
|
||
| 13.08.2019, 08:10 | ||
|
Таким образом, экземпляры следующих классов могут не иметь значения std::optional<T> std::any std::variant<T>
0
|
||
|
96 / 82 / 22
Регистрация: 19.10.2013
Сообщений: 485
|
||||
| 13.08.2019, 08:32 | ||||
|
Может вы ещё скажете что наследование и полиморфизм - это тоже грязный мазохизм в С++? Я вам как непробиваемому идиоту повторю ещё раз: у каждой конкретной задачи есть свой способ решения. Жизнь не заканчивается на объявлении 20-ти массивов с 20-ю разными типами. Иногда надо json-распарсить, иногда интерпретатор написать. Просто перестаньте впаривать свои ценности вида "Так делать плохо, а как надо я сам не знаю, но так точно не надо, а то выглядит некрасиво".
0
|
||||
|
Комп_Оратор)
|
||
| 13.08.2019, 11:00 | ||
|
Но строение AST это другая задача. Это не построение массива, хранящего смешанные типы. Решение основанное на наследовании лучше чем union, хотя к теме топика оно не относится. С++ это язык хорошо справляющийся с полиморфизмом поведения (шаблонные функции и виртуальные методы) и практически не поддерживающий полиморфизм данных. Не классов, а именно данных (для идиотов повторяю). Именно по этой причине (называемой статической типизацией) С++ не поддерживает перегрузку основанную на типе возврата. То есть, если бы различие в типах данных оставалось внутренним делом полиморфного типа (на который смотрит указатель базового класса, ASТ - это оно, в частности), то проходя по массиву указателей на базовый тип можно легко воспользоваться полиморфизмом виртуальных функций. Но если требуется вынуть разнотипные данные на свет божий, то решения в стиле С++ нет. Тут могут быть только if'ы, switch'и и пр. методы внешней логики, которые поломают гибкость, читаемость, скорость. Пусть мы имеем простой код, который должен сложить пару чисел, округлить по правилам округления действительных чисел до целого и вернуть результат. Тут простая перегрузка функций покажет, что С++ код выберет для целых простое сложение а для дабл return a+b+0.5;. И не будет перерасхода времени. Тип возврата у всех перегрузок int и нет проблем. А вот если задача потребовала бы возврата значений разного типа, то смысл перегрузки теряется. Нет синтаксиса, способного на одном вызове присвоить результат принимающей переменной, которая будет то одного, то иного типа, в зависимости от реальных типов переданных аргументов.Именно по этой причине, массив разнотипных данных не может быть источником различных данных. Он может, но он не эффективен. Именно поэтому при разборе IPC сообщений, наиболее эффективным путём являлась бы типизация и разбор по массивам (и др структурам) разного типа. Весь язык построен на этом. Компилятор работая с исходным кодом, это делает и заставляет нас, это делать. Это порука скорости. Остальное - игры ума, который героически борется со здравым смыслом. Такие умы всегда очень упрямы и побеждают. Что касается жлобства, то вы и вам подобные бросают на форум грязь. Это вы начали говорить в хамском тоне и вынудили меня ответить. Этот пост в части аргументации не вам адресован и можете не отвечать (ах, если бы...). Как показала практика, толку не будет. Это текст для форумчан, которые подумают и согласятся или нет. Но подумают.
0
|
||
|
96 / 82 / 22
Регистрация: 19.10.2013
Сообщений: 485
|
||||||||||||||
| 13.08.2019, 11:32 | ||||||||||||||
|
Когда я создаю массив и засовываю в него ДОМ, ТАНК, СОЛДАТА, ПУЛЮ, ВЗРЫВ, ДЕРЕВО, КАПЛЮ ДОЖДЯ - я не хочу искать в этом массиве какую-то конкретную сущность, я просто хочу пройтись по этому неотсортированному массиву и вызвать у всех объектов метод render(), чтобы обновить прорисовку. А может быть попутно захочу вызвать какой-то дополнительный метод, которого нет в родительском классе, но он есть в конечном объекте, например ДОМУ никуда лететь не нужно, а ПУЛЯ должна переместиться и у нее кроме render() есть ещё updatePosition() - привет свичи и ифы. И только потому что вы своим предметным мышлением не можете представленный код спроецировать на решение какой-то абстрактной задачи, не значит, что это Вы пришли и заявили, что наследование - это мазохизм. Вы пришли и заявили, что объединения - это мазохизм. Вы пришли и заявили, что то, как можно решить заданную задачу - это мазохизм. Вы это сделали в одном сокрушительном комментарии, не предложив никакого решения, а просто проорали в стиле "вам это не нужно". Нет нужно, раз такой вопрос есть. И я для вас повторю один из своих ответов:
Добавлено через 9 минут Как и в первом своём сообщении в этой теме, где вы решили попрактиковать на мне свои навыки внушения
0
|
||||||||||||||
|
484 / 296 / 53
Регистрация: 13.08.2019
Сообщений: 1,043
|
|
| 13.08.2019, 12:09 | |
|
Всем привет!
Если автору вопроса хочется создать массив разнотипных элементов классическим способом, то естественно, что ничего не получится. Однако, Вы можете воспользоваться вариативностью и получите одномерный массив из вариантов. Чувствуете разницу? Одномерный массив из вариантов и одномерный массив из double, int, bool. В конечном итоге всё будет упираться в тот факт, что в массиве должны быть элементы одного типа. Вариант, строки, int-ы или bool-ы - не суть. Суть, чтобы они пренадлежали одному типу данных. WxMaper привёл реализацию на первой странице. Да, это решение вашей проблемы: реализация с использованием варианта. Имеет право на жизнь? Да вполне. Фактически, J-SON работает с вариантами. С таким же успехом Вы можете создать одномерный массив структур. Понимаете? На этот раз элементом массива будет структура, внутри которой хранятся разнотипные элементы или однотипные. Но Вы не сможете создать одномерный массив из double, int, bool - одновременно, без дополнительных привидений к единому типу/представлению. Память не обманtшь и резервироваться она должна соответствующим образом под указанный тип данных.
2
|
|
|
Комп_Оратор)
|
|||
| 13.08.2019, 14:04 | |||
|
Добавлено через 11 минут int array_int[5]; происходит как бы инстанцирование шаблона. То есть конкретизация/опредмечивание. Мы спускаемся от уровня абстракции - массив (это ещё не тип, а обобщение для всех конкретизаций) до уровня массив целых чисел из пяти штук на данной машине. Остальные пункты тоже не блещут. По указателю на сырую память можно прочесть всё что угодно, а в массив unsigned char записать и прочесть можно всё что угодно, но он не перестанет быть массивом unsigned char.Вопрос топика о не совместом. И об этом я сказал и повторю столько раз сколько потребуется, но уже не вам. Многоликий вы наш.
0
|
|||
|
96 / 82 / 22
Регистрация: 19.10.2013
Сообщений: 485
|
|||||||
| 13.08.2019, 14:25 | |||||||
MyStruct a[100]; - это не инициализация массива? Прошу вас, остановите этот поток бреда. Сходите умойтесь, в конце концов, и перечитайте на ясную голову САМОЕ ПЕРВОЕ сообщение в этом топике: Добавлено через 3 минуты Или к тому товарищу, который имея полномочия, выделяет свои сообщения как решение вопроса, однако решения в его ответах не наблюдалось. Уж не знаю кто, но кто-то эти галочки удалил из шапки топика, сомневаюсь что это был тот, кто их туда загнал.
0
|
|||||||
| 13.08.2019, 14:25 | |
|
Получить массив, где будут храниться индексы строк матрицы, в которых есть равные элементы Создать класс, в котором информация будет храниться в хеше. Комментарии. Создать модуль, в котором будет храниться процедура создания картинки
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал.
Оно само - говорит.
Кто слышит тот слышит.
|
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было
ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась.
Первый вариант. . .
|
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2.
Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
|
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет.
Но обычно это 50 лет и более.
Наверное, закисление почвы происходит сезонно в средней. . .
|
|
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
|
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS
Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
|
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи.
Через несколько переработок от PHP кода к C89 (надеюсь, 89).
Но довольно запутанно получилось. Код для Linux.
Но если убрать time и то, что с ним. . .
|
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки
Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
|