23 / 23 / 11
Регистрация: 15.04.2012
Сообщений: 183
|
|
1 | |
Union - Объединения21.09.2012, 17:49. Показов 10588. Ответов 21
Метки нет (Все метки)
Объясните доходчиво что такое Объединения и для какой работы они нужны.
Несколько книг листал а про объединения толком ничего не сказано и нет примеров почти. Везде одно и тоже: пример с переменными разных типов и выводом их значений при объявлении каждой... Что-нибудь более реальное к жизни что ли хотелось бы увидеть. Ну как минимум это union и структуры, или классы. И если кто видел книгу в которой доходчиво рассказывается про union дайте пожалуйста название этой книги. Спасибо!
0
|
21.09.2012, 17:49 | |
Ответы с готовыми решениями:
21
Объединения (union) Тип объединения union Union union |
Twilight Parasite
154 / 150 / 7
Регистрация: 21.07.2011
Сообщений: 908
|
|
21.09.2012, 17:52 | 2 |
Elfenlide, K&R! так как юнионы, энумы и структуры это наследие няшного Си!
0
|
1066 / 583 / 87
Регистрация: 03.12.2009
Сообщений: 1,255
|
|
21.09.2012, 17:54 | 3 |
0
|
23 / 23 / 11
Регистрация: 15.04.2012
Сообщений: 183
|
|||||||||||
21.09.2012, 18:18 [ТС] | 4 | ||||||||||
K&R! - это как понимать?)
Дайте нормальную книгу или может сайт с хорошими примерами. Ссылка что дали выше ,я там был, и совсем не понимаю зачем что и почему.....как бы понятно, что можно выводить в разных типах одно значение, но неужели юнион используют только для того чтобы выполнять задачи подобные этой:
Как это сделать я не представляю себе. Препод сказал используй "Объединения Union", я посмотрел что там к чему, и ничего не понял, препод мне объяснил тоже что и на сайт указанном выше, хотя это мне понятно. Непонятно как юнион в моей ситуации может помочь. он сказал использовать можно юнион и массив структур.. дал небольшой фрагмент который от руки набросал за минуту, сказал пару умных слов и я так и ничего не понял...ну, кроме мелочей которые итак ясны.... это то что он мне написал:
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
21.09.2012, 18:19 | 5 |
Invader_Zim, Ага, только вот union в C++11 вышел далеко за рамки данного наследия.
0
|
Twilight Parasite
154 / 150 / 7
Регистрация: 21.07.2011
Сообщений: 908
|
|
21.09.2012, 18:30 | 6 |
ForEveR, что не использую, о том не говорю. Времени с новым стандартом разобраться ,к сожалению, нет.
0
|
23 / 23 / 11
Регистрация: 15.04.2012
Сообщений: 183
|
|
21.09.2012, 21:01 [ТС] | 7 |
Это всё замечательно,но может кто-нибудь мне сможет всё-таки объяснить, а-то разговоров об этом много а что это и зачем, непонятно
0
|
~ Эврика! ~
1257 / 1006 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|||||||||||
21.09.2012, 21:16 | 8 | ||||||||||
Окей, суть в чём: юнион позволяет хранить несколько величин (в данном случае величины типов нормальный-элемент-множества и множество-как-элемент-множества) в одном куске памяти. То есть одну и ту же переменную юнион-типа можно трактовать и как один из хранимых типов, и как другой.
Применительно к данному случаю юнион тут как собаке пятая лапа, но раз уж сказано. (Вообще стоит делать внутри несколько контейнеров "для нормальных", "для множеств", "для другой-третий-тип".) Идею вы поняли правильно (шаблонами не гружу):
0
|
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
|
|
21.09.2012, 21:21 | 9 |
хотел бы уточнить у знающих:
union разве может не POD типы содержать? множество какое-то например. старый стандарт? новый стандарт?
0
|
~ Эврика! ~
1257 / 1006 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
21.09.2012, 21:45 | 10 |
В старом может, но с дикими ограничениями: никаких своих конструкторов и деструкторов, никаких виртуальных функций и не трогать стандартный оператор copy-assign (Type::operator=(const Type&)). Так что тот мой пример выше наверняка не сработает :) По крайней мере, если хранить множество не как указатель.
В новом ограничение снято, но при условии, что все эти функции реализуются руками для юниона, если они нужны. (Ну и список, естессно, расширился move-конструктором/присваиванием.)
1
|
Модератор
8951 / 6717 / 921
Регистрация: 14.02.2011
Сообщений: 23,714
|
|||||||||||||||||||||||||||||||||||||||||
21.09.2012, 21:54 | 11 | ||||||||||||||||||||||||||||||||||||||||
Infinity3000,
посмотрел я на твою ссылку и пригорюнился одна эта фраза Elfenlide, попытаюсь объяснить своими словами Объединения используют когда одни и те же данные нужно выразить разным способом например(куски реальной программы для работы с контроллера с USB) хост посылает контроллеру данные упакованные вот в такую структуру
их удобно объединить
и тут приходит на помощь объединение
массив из 8 байтов структуру SETUP_PACKET и слово wRequest(используются два первых байта) и работаем
2
|
23 / 23 / 11
Регистрация: 15.04.2012
Сообщений: 183
|
|
22.09.2012, 00:01 [ТС] | 12 |
Спасибо большое, теперь уже более менее понятно, думаю сам уже на практике доработаю.
Ещё один вопрос: Откуда такие знания?)Дело в том что я смотрел несколько книг разных по С++, и везде один пример на ввод и вывод элементов разного типа, и просто синтаксис объявления, а толкового ничего нету.Какие книги вы посоветуете может из тех в которых можно полноценно черпать информацию?
0
|
~ Эврика! ~
1257 / 1006 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
22.09.2012, 00:06 | 13 |
Естессно, я не помню наизусть тонкости. Интересуют тонкости — открываем стандарт (новый) и читаем. Вот оттуда я и вычитал про конкретные ограничения (так-то только смутно помню, что туда засунуть можно только классы, которые не особо круче сишных структур).
0
|
23 / 23 / 11
Регистрация: 15.04.2012
Сообщений: 183
|
|
22.09.2012, 00:11 [ТС] | 14 |
0
|
Модератор
8951 / 6717 / 921
Регистрация: 14.02.2011
Сообщений: 23,714
|
|
22.09.2012, 00:26 | 15 |
если вопрос к ~OhMyGodSoLong~, то он уже ответил
а если ко мне то отвечу словами Гете "Теория без практики мертва, а вечно зелено лишь древо жизни" изучай побольше исходников , задавай вопросы, ну и книги тоже читай но отбрасывай ненужное кстати я тоже долго не пользовался объединениями поскольку объяснения были как на той ссылке но увидев пару раз их применения не это а нормальное например как я привел, понял их силу а с учебниками особенно с нашими будь осторожней недавно тема проскакивала привели методичку 2012 для работы с BC 3.1( лет десять наверно тупо перепечатывали) смотри переводную литературу, а если знания позволяют читай в оригинале
0
|
23 / 23 / 11
Регистрация: 15.04.2012
Сообщений: 183
|
|
22.09.2012, 00:56 [ТС] | 16 |
Собственно так и делаю, пока Лафоре изучаю шаг за шагом, и думаю ещё пробежаться потом по Харви и Пол Дэйтлы, ну а после страуструпа чтоли.
К сожалению я не мог въехать в объединения как раз-таки по причине того что сколько ни искал, толком не нашёл нормального примера с union или если находил то там небыло комментариев и код слижком сложный для моего уровня. Ещё раз спасибо огромное всем за помощь! Добавлено через 21 минуту А вы не могли бы свой пример который писали доработать так чтобы он компилировался, чтоб уже от рабочего изучать, ато тут ошибок много выбивает, и в union у вас стоит Set set; но ведь структуры или класса Set небыло вообще создано...Если вам не сложно доработайте пожалуйста.И вы писали что union для решения такого типа задачи не нужны,а каким ещё спсобом можно решить такую задачу не используя STL ?
0
|
Модератор
8951 / 6717 / 921
Регистрация: 14.02.2011
Сообщений: 23,714
|
||||||
22.09.2012, 01:24 | 17 | |||||
в твоем примере как раз все ясно
если возьмешь вот так element.s будет указатель на структуру если так element.el указатель на байты вот пришло в голову это не рабочий пример а мысли вслух распечатать дамп памяти который занимает структура(или класс)
0
|
23 / 23 / 11
Регистрация: 15.04.2012
Сообщений: 183
|
|
22.09.2012, 01:42 [ТС] | 18 |
0
|
~ Эврика! ~
1257 / 1006 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
||||||
22.09.2012, 02:33 | 19 | |||||
Я б делал так. (Осторожно, впереди кирпич.)
Поэтому можно сделать два вектора: std::vector<AtomicType> и std::vector<Set>. Первый хранит все элементы-атомы, второй — множества. Меньше динамических проверок типов и чуть быстрее поиск, просто потому, что мы уверены, что если нам надо искать число, то мы его ищем среди чисел, а не среди включённых в множество подмножеств. И наоборот, если мы ищем множество, то тоже знаем, где его искать.
1
|
23 / 23 / 11
Регистрация: 15.04.2012
Сообщений: 183
|
|
22.09.2012, 08:41 [ТС] | 20 |
Спасибо большое, буду разбирать!)
Добавлено через 1 час 30 минут что-то не компилится, несколько ошибок: 1.Синтаксическая ошибка идентификатор "SetElement" 2. Other - не объявленный идентификатор 3.бинарный "оператор ==" слишком мало аргументов 4.Set<T>::SetElement::operator == " не является статическим членом. 5.Set<T>::SetElement - зависимое имя не является типом.
0
|
22.09.2012, 08:41 | |
22.09.2012, 08:41 | |
Помогаю со студенческими работами здесь
20
Union Union Union и UB union с методами Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
Как работать с ветками (branch) в Git
InfoMaster 17.01.2025
Система контроля версий Git произвела революцию в процессе разработки программного обеспечения, предоставив разработчикам мощный инструмент для управления изменениями в коде. Одной из наиболее важных. . .
|
Как откатить последние коммиты в Git
InfoMaster 17.01.2025
Система контроля версий Git стала неотъемлемой частью современной разработки программного обеспечения, предоставляя разработчикам мощные инструменты для управления изменениями в коде. Одним из. . .
|
Что такое boilerplate и scaffold, чем они отличаются
InfoMaster 17.01.2025
В современном мире разработки программного обеспечения эффективность и скорость создания качественного кода играют crucial роль в успехе проектов. Разработчики постоянно ищут способы оптимизировать. . .
|
Чем отличаются ссылки и указатели в С++
InfoMaster 17.01.2025
В современном программировании на C++ эффективная работа с памятью является ключевым аспектом разработки качественного программного обеспечения. Указатели и ссылки представляют собой два. . .
|
В чем разница между PUT и POST
InfoMaster 17.01.2025
В современной веб-разработке правильное использование HTTP-методов играет ключевую роль в создании надежных и эффективных API-интерфейсов. Протокол HTTP прошел долгий путь развития с момента своего. . .
|
DTO, POCO и Value Object: что это такое, когда и как использовать
InfoMaster 17.01.2025
Введение в паттерны передачи данных
В современной разработке программного обеспечения эффективное управление данными и их передача между различными слоями приложения являются ключевыми аспектами. . .
|
Что такое pull request в Git
InfoMaster 17.01.2025
В современной разработке программного обеспечения pull request в Git представляет собой ключевой механизм для эффективного взаимодействия между разработчиками при работе над общим кодом проекта. По. . .
|
Как вернуться к предыдущему коммиту в Git
InfoMaster 17.01.2025
Система контроля версий Git представляет собой мощный инструмент для управления изменениями в программном коде, который позволяет разработчикам эффективно отслеживать и контролировать историю. . .
|
Что такое паттерны программирования и проектирования
InfoMaster 17.01.2025
Роль паттернов в современной разработке программного обеспечения
В современном мире разработки программного обеспечения паттерны проектирования стали неотъемлемой частью профессионального подхода. . .
|
Как добавить конструктор Яндекс Карт на сайт
InfoMaster 17.01.2025
Введение в API Яндекс Карт
В современной веб-разработке интеграция картографических сервисов стала неотъемлемой частью многих проектов. API Яндекс Карт представляет собой мощный инструмент для. . .
|
Что такое javascript:void(0) и зачем это нужно
InfoMaster 17.01.2025
Когда вы сталкиваетесь с веб-разработкой, особенно с использованием JavaScript, одной из директив, которая часто встречается, является javascript:void(0). Это выражение вызывает интерес из-за своей. . .
|
Что такое оркестрация и хореография микросервисов
InfoMaster 17.01.2025
Введение в оркестрацию и хореографию микросервисов
В современном мире разработки программного обеспечения микросервисная архитектура стала ключевым подходом к созданию масштабируемых и гибких. . .
|