![]() |
|
Модераторы: bsa |
![]()
|
|
| Abyx |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 601 Регистрация: 3.11.2009 Репутация: 5 Всего: 10 |
EvilsInterrupt, очевидно инкрементируется int который в карте
какбэ эта карта состоит из int и фактически код представляет собой
|
|||
|
||||
| EvilsInterrupt |
|
|||
|
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: нет Всего: 9 |
Abyx,
Спасибо ) А доп. вопрос ? ;) |
|||
|
||||
| Abyx |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 601 Регистрация: 3.11.2009 Репутация: 5 Всего: 10 |
в map хешей нет, там бинарный поиск по упорядоченным ключам т.е. если ключи - string, пары сортируются в алфавитном порядке |
|||
|
||||
| EvilsInterrupt |
|
|||
|
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: нет Всего: 9 |
Abyx, Огромное спасибо.
|
|||
|
||||
| Abyx |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 601 Регистрация: 3.11.2009 Репутация: 5 Всего: 10 |
для хешей надо другой контейнер, boost::unordered_map, он же std::tr1::unordered_map
http://www.boost.org/doc/libs/1_41_0/doc/html/unordered.html |
|||
|
||||
| wedens |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 17.10.2009 Репутация: нет Всего: нет |
дабы не создавать новую тему, спрошу здесь.
как как калькулятор из книги находит имя переменной и возвращает её значение?
здесь я так понимаю в v возвращается значение, если в map существует запись string_value, а если не существует, то создается. но как тогда в эту запись приписывается double значение? Это сообщение отредактировал(а) wedens - 11.12.2009, 23:21 |
|||
|
||||
| xvr |
|
||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Рассмотрим, что тут написано (вот это histogram[s]++;):
Затем инкрементируется значение по возвращенной ссылке.
|
||||||||
|
|||||||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
Помню тоже долго разбирался в нём. Я считаю что это пример отвратителен с точки зрения поддержки и расширения. Возможно я ошибаюсь, не спец в проектировании, но на мой взгляд, код безоговорочно должен быть простым для понимания, частенько в этом помогают комментарии, но самое главное, надо реализовать алгоритм, понятный для человека - дерево синтаксического разбора разбивает выражение по приоритетам, потом всё выражение вычисляется и т.д. А у Страуструпа, насколько помню, три функции рекурсивно вызывают друг друга в зависимости от нескольких ифоф, и создают приличную "мешанину" в стеке вызовов, которую тяжело проследить. При этом всё жестко завязано с парсером, брр... У него изначально функциональность разделена на части неправильно. Жаль что он не написал перед началом примера Внимание! Плохой стиль. Ни в коем случае не пытайтесь повторить! -------------------- вопросов больше чем ответов |
|||
|
||||
| EvilsInterrupt |
|
|||
|
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: нет Всего: 9 |
Леопольд,
Буквально месяца 2-3 назад читал код калькулятора Страуструпа и понял его буквально за 30 мин. Сейчас смотрю и думаю чего там сложного-то ? Что собственно произошло за это время? По своим антивирусным задачам, дома(если шеф увидит Думаю Бьярн, как и многие люди поступил как обычный человек: "Мне же понятно, вот же есть грамматика, вот есть код. Возьму элементарнейший калькулятор, каких еще поискать", но он забывает, что по его книге могут учиться совсем ньюбы! А возможно и не забывает, а сделал допущение что читают уже серьезные люди когда-то программившие на си и теперь изучающие плюсы. Мое личное мнение по поводу книги, Страуструп предположил, что язык вышел излишне сложным и поэтому пишет даже в начале : "Если вы чтото не поняли, не переживайте и идите дальше. В дальнейших главах будем говорить более детально". Также думаю, что он писал книгу прежде всего для программистов на языке Си. Это учитывая тот факт, когда она появилась впервые и какую цель он преследовал создавая язык, какие сложности вставали до его языка. А дальше просто ее саппортил ;) Вот и вышло, старые грабли, получили новую жизнь ! Вывод: Читать, читать, но читать много проходно! Как компиллер проходит по сорцу! Сначала токены, потом лексемы, потом грамматика и т.д. и т.п. ;) |
|||
|
||||
| EvilsInterrupt |
|
|||
|
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: нет Всего: 9 |
Читаю про enum-ы ;)
вот, что пишет: "Диапазон значений перечисления определяется след. образом. Пусть n-максимальное возможное значение элемента перечисления . Пусть m-такое минимальное целое, что 2^m-1 больше или равно n. Тогда верхняя граница диапазона равна 2^m-1. Если наименьший элемент имеет неотрицательное значение, нижняя граница диапазона равняется нулю. Если наименьшее значение отрицательно, нижней границей диапазона является наименьшая ближайлая отрицательная степень двойки плюс 1. Таким образом, диапазон определяется минимальным количеством бит требуемым для представления значений всех элементов перечисления" из этого следует, что автор сделал допущение в сторону мало-мальски математематически подкованного читателя! |
|||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
Думаю, мне бы сечас тоже особого труда не составило, потому что я сейчас работаю на языке, где goto использутеся буквально через каждые 10 строк кода. Точнее поддерживаю этот бред. А так как книга Страуструпа была у меня второй, после Подбельского и мышление ещё не выработалось, я разбирался в "калькуляторе" около дня. Это сообщение отредактировал(а) Леопольд - 14.12.2009, 13:36 -------------------- вопросов больше чем ответов |
|||
|
||||
| EvilsInterrupt |
|
|||
|
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: нет Всего: 9 |
Леопольд, готу рулит! ;))) я сам ща в таком коде плаваю из-за рабочей задачи поставленной партией ;) мало того что это гоуту, так еще коду 10 лет и писало его столько же же чел, каждый возвращался в разные промежутки временного отрезка год, два . А люди как правило за годы "умнеют" и написание кода тоже меняется. Это не есть хорошу(первоначальный вариант этого сообщения было грубее, сорри)
Это сообщение отредактировал(а) EvilsInterrupt - 14.12.2009, 14:41 |
|||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
Хех, "моему" коду не менее 20 лет. И писало его человек надцать, если не больше. Вся система состоит из 1000 - 1500 файлов по 15000-70000 строк кода (вместе с комментами). Никто её не знает целиком, только небольшую её часть. Это добро, примерно на 70% задокументированно, но качество документации хромает на все конечности -------------------- вопросов больше чем ответов |
|||
|
||||
| EvilsInterrupt |
|
|||
|
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: нет Всего: 9 |
Леопольд, Будут мысли хорошего и эффективного рефакторинга кода с goto пиши! ;) Только плиз в виде отдельной темы, все равно понадобиться. Хотя бы нам двоим хранить мысли по войне с готу )
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
1. разделение на функции (return лучше, чем goto) 2. выделение части кода в цикл do { }while (false); 3. исключения, но это в редких случаях (когда речь идет об обработке редких ошибок). |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |