![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| cristaloleg |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 15.6.2009 Где: Donetsk Репутация: нет Всего: нет |
if x in [1,2,5] then
Как это записать в С++? Зы если нужно подключить заголовочные файлы, то скажите... |
|||
|
||||
| zim22 |
|
||||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
*** более С++ подход
Это сообщение отредактировал(а) zim22 - 16.6.2009, 20:09 |
||||
|
|||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
1-ый вариант плох своей крайней неуниверсальностью - так можно эмулировать только константные сеты.
2-ой - в первую очередь линейной (а не константной, как в Паскалевском варианте) сложностью. Если речь именно о записи строчки в первом посте - то вариант 1 вполне сойдёт. Впрочем, для трёх значений вообще можно написать иф с тремя сравнениями... Если же речь о паскалевских множествах в принципе - std::set. Правда, константной сложности поиска/добавления/удаления мы тут не получим. "Почти" константной она будет для всяких hash_set, unordered_set - вообщем, что там ближе |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
Как Паскаль компилирует это выражение? Я думаю, тоже будет линейная сложность.
|
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
Нет. set в паскале - это всегда 8 байтов, поэтому сеты можно создавать только из однобайтовых данных (в дельфях быть может есть какие-т опции для этого - к счастью, я это плохо уже помню...). Добавление/удаление элемента в множество - установка/сброс соответствующего бита. Проверка принадлежности (in) - проверка одного бита. Т. е. сложность константная.
|
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 12 Всего: 459 |
Размер зависит от числа элементов. Максимум 256 бит / 8 = 32 байта. Добавлено через 4 минуты и 21 секунду А зря очень удобная фича, но думаю что в С++ можно создать временный объект и в конструкторе передать элементы -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
Такой Set можно создать и в C++. См. его реализацию в Borland C++ Builder. Сложность проверки такая же, как в Delphi, но перед этим Set нужно заполнить - линейная зависимость от числа элементов в Set.
Это сообщение отредактировал(а) math64 - 16.6.2009, 22:59 |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
Ээ.. 1. Как это размер зависит? У нас есть переменная (set of что-нибудь). Добавляем элемент в неё. Ты хочешь сказать при этом изменится размер, занимаемой этой переменной? 2. Да, с арифметикой у меня совсем туго Добавлено через 1 минуту и 49 секунд А, блин, сорри, кажется понял - речь про "количество" задаваемое минимумом/макисмумом при описании самого типа? Если я опять не туплю, тогда всё нормально - просто я действительно не помню Паскаль и типы-диапазоны (ну или как там это называется?) Добавлено через 13 минут и 5 секунд А разве, если у нас объявлено констатное множество компилятор паскаля не сможет его сам построить (в компайл-тайм всмысле)? Да и, в любом случае - если мы выполняем n добавлений (в рантайме) - то само собой это не может иметь постоянную сложность |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Если у нас константное множество, то и с++ его можно заполнить в компайл-тайм.
Стоит ли оно того, вопрос. -------------------- ... |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 12 Всего: 459 |
Перевыделяется память и создается новое множество большего размера. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
Эээ.. что-т я не понял. Если действительно так - то зачем нужно такое вообще?! И почему тогда ограничение на размер данных (типа set of integer не сделаешь). Блин, как будет время - найду компилятор дельфи/паскаля, надо проверить, что он там генерит |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
И всё время хранится максимальный элемент множества что ли (иначе вообще не представляю, как это может работать)?
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| Alexeis |
|
||||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 12 Всего: 459 |
Может понадобиться до 500 Мб для одной такой переменной. Добавлено через 1 минуту и 36 секунд
Если добавляешь число 217, то устанавливается 217 бит в 1. Чтобы его проверить, смотришь значение этого бита. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
||||
|
|||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |