![]() |
|
Модераторы: bsa |
![]()
|
|
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Во-первых, в твоем коде есть выход за пределы массива. Во-вторых, имхо, один if лишний. А в-третьих, есть ограничения на тип элемента массива - он должен быть свободно конвертируемым в int.
|
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
bsa, выход за пределы не увидел, зато увидел, что выполняется на один раз меньше, чем элементов в векторе из-за ++curr_ < count_ в условии выхода, которое проверяется сразу после int val_ = vec_[curr_]
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
а. точно. я почему-то проглядел это место, так как для меня было бы логичней curr_++ < count...
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
да это есть.. :( ну там предполагалось, что вместо инт будет стоять typeof из "оригинала".. я просто не стал "утруждать" им codepad возможно, для этого и было "пилите" |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
a виной тому, что не хотелось использовать два fora :( вот исправленный вариант : http://codepad.org/gF277K0i заодно "оставил" задание типа программистом. |
|||
|
||||
| djamshud |
|
||||||||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 4 Всего: 39 |
mes, спасибо. Странная вещь, я всегда думал, что внутри if нельзя никак определить переменную... Но ваш пример foreach-а, мне кажется, неудачен как минимум тем, что в val_ порисходит копирование из вектора.
>typeof в msvc нет и не будет, его нет в С++0х, там есть decltype, Лично мне пофиг. Если мне нужно портировать свой софт под винду, я воспользуюсь GCC. Да и не нужно это как правило, ибо системнозависимый он обычно. >std::for_each(v.begin(), v.end(), [](T x){ ... }); Удобно аж до абассаки. Итак. Вот что получилось, работает и с continue и c break.
Из GCC-измов используется typeof и ({}). От последнего можно отказаться, но код чуть усложнится. От первого тоже можно, но, как уже писал, сантаксического сахара станет меньше. Добавлено через 2 минуты и 21 секунду Знатоки ассемблеров, если вам не лень, оцените насколько этот код отсасывает у обычного
-------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
||||||||
|
|||||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
там позже еще один вариант предложен... что в принципе соответствует вашему последнему..
зато свободы у программиста больше.. хотя бы в возможности указать константность. Это сообщение отредактировал(а) mes - 21.7.2010, 12:44 |
|||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 4 Всего: 39 |
>зато свободы у программиста больше.. хотя бы в возможности указать константность.
Зачем ее самому указывать? Если контейнер - константа, то и его operator[] возвращает константу, typeof это выловит и сам все сделает. Если же не использовать typeof, наоборот придется самому следить за этим. Но с другой стороны в моем варианте нельзя указать, что нужно использоваться ссылку на константу при работе с неконстантым контейнером, но это не так уж и важно, я думаю... Второй вариант потом увидел. Да, по смыслу похоже. -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
![]()
|
| Правила форума "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. |