Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> что предпочтительнее, ??? 
:(
    Опции темы
djamshud
Дата 20.7.2010, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 4
Всего: 39



>а разве не выпадаете ?!

Где выпадаю? Просто ввожу новую конструкцию, которая синтаксически схожа с остальными. Без второго цикла ссылку пришлось иницализировать непосредственно в теле основного цикла, а тут бы возникла непонятка с операторными скобками.

borisbn, можете попробовать __typeof или __typeof__. Или вообще убрать его и просто вызывать foreach(vector, int value). В последнем случае синтаксического сахарку становится намного меньше.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
mes
Дата 20.7.2010, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(djamshud @  20.7.2010,  16:34 Найти цитируемый пост)
Где выпадаю?

ну к примеру :

Код

foreach (vec, val) { std::cout << val << " "; break; }


Добавлено через 2 минуты и 12 секунд
немножко оффтопа : 
1. i в теле макроса не очень удобна, надеюсь она имеет такое имя лишь для примера
2. имхо логичнее (как бы общепринятей) содержимое называть на первом месте, а контейнер на втором.. 




--------------------
PM MAIL WWW   Вверх
djamshud
Дата 20.7.2010, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 4
Всего: 39



Да, break и continue пролетают. Подумаю, что с ними делать.

1. Да
2. Имхо логичнее сначала указать, где ходим, потом - чем.

Добавлено через 3 минуты
break не замечал, потому что использую в тривиальных проходах, а реальные сложные проходы, где необходимо управление ими, у меня в любом случае организуются сложнее и редко затрагивают весь контейнер целиком.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
mes
Дата 20.7.2010, 19:49 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(djamshud @  20.7.2010,  16:54 Найти цитируемый пост)
Имхо логичнее сначала указать, где ходим, потом - чем.

если обратите на новостандартный for, а также на подобные конструкции других распространенных языков, то можно заметить, что вначале идет чем, а потом где..

в общем стремятся соответсвовать  _конструкции_ : for what in where

Добавлено через 4 минуты и 9 секунд
Цитата(djamshud @  20.7.2010,  16:54 Найти цитируемый пост)
Подумаю, что с ними делать.

самое простое, что приходит в голову, заменить
Код

for(typeof((container)[0]) &value=(container)[i];keep!=0;keep=0)

на
Код
 if ( ( typeof((container)[0]) &value=(container)[i] ) && false) else

по другому придется писать кучу кода..


--------------------
PM MAIL WWW   Вверх
djamshud
Дата 20.7.2010, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 4
Всего: 39



>если обратите на новостандартный for, а также на подобные конструкции других распространенных языков, то можно заметить, что вначале идет чем, а потом где..

Знаю, но мне это кажется нелогичным. Ну еще свою роль сыграло то, что в php это реализовано так:
Код

foreach($array as [$key=>]$value)...

А первый раз foreach я его увидел именно в нем.

>if ( ( typeof((container)[0]) &value=(container)[i] ) && false) else

Внутри if ничего не выйдет, это было первой идеей. Это синтаксическая (вроде бы) ошибка. Внутри if можно объявить переменную, ну и впрочем зафигачить туда любой код так:
Код

if(({int blabla=0;true;}))..

Но она локальна внутри самого тела условия.

Это сообщение отредактировал(а) djamshud - 20.7.2010, 20:09


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
mes
Дата 20.7.2010, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(djamshud @  20.7.2010,  19:07 Найти цитируемый пост)
Но она локальна внутри самого тела условия.

внутри всего блока включая блок else smile

Это сообщение отредактировал(а) mes - 20.7.2010, 20:17


--------------------
PM MAIL WWW   Вверх
djamshud
Дата 20.7.2010, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 4
Всего: 39



Код

if(({int a=1;true;}))
printf("%d\n",a);

Цитата

file.cpp: In function ‘int main()’:
file.cpp:7: error: ‘a’ was not declared in this scope



--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
boostcoder
Дата 20.7.2010, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 20
Всего: 110



Цитата(borisbn @  20.7.2010,  17:04 Найти цитируемый пост)
g++ 4.1.2 

кочмар smile компилятор 2007го года smile 
PM WWW   Вверх
bsa
Дата 20.7.2010, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



boostcoder, это ты Red Hat скажи.
PM   Вверх
dva300
Дата 20.7.2010, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 17.2.2010
Где: Москва

Репутация: нет
Всего: 1



Цитата

boostcoder, это ты Red Hat скажи.

хм... я так понял что вопрос был очень даже прост а вот как далеко все зашло  smile 
начинаю потихоньку влюблятся в этот язык  smile 
--------------------
Участник движения Культура Вождения
PM   Вверх
boostcoder
Дата 20.7.2010, 23:39 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 20
Всего: 110



Цитата(bsa @ 20.7.2010,  20:42)
boostcoder, это ты Red Hat скажи.

а зачем?  smile 
пусть тупят. больше идиотов - меньше конкурентов!
PM WWW   Вверх
mes
Дата 21.7.2010, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(djamshud @  20.7.2010,  19:26 Найти цитируемый пост)
error: ‘a’ was not declared in this scope

ну так она ж в фигурных скобках... иф тут не при делах..



--------------------
PM MAIL WWW   Вверх
mes
Дата 21.7.2010, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



djamshud, ловите и пилите ( она золотая © ) smile

http://codepad.org/BxudbmbN (см. ниже по тексту)

естественно для полноценного foreacha далеко, но как альтернатива приведенному выше, думаю вполне сгодится smile


Это сообщение отредактировал(а) mes - 21.7.2010, 12:23


--------------------
PM MAIL WWW   Вверх
Abyx
Дата 21.7.2010, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 5
Всего: 10



вообще-то есть BOOST_FOREACH

в msvc есть
    for each(T x in container) {} ,
но его нет в гцц и такого не будет C++0x, там будет
    for(T x : container) {} .

typeof в msvc нет и не будет, его нет в С++0х, там есть decltype,
однако есть BOOST_TYPEOF который работает в msvc

-----
о чем тема-то?

Добавлено через 4 минуты и 27 секунд
алсо в С++0х есть

std::for_each(v.begin(), v.end(), [](T x){ ... });

а если применить boost.range2 то

boost::for_each(v, [](T x){ ... });
PM MAIL   Вверх
mes
Дата 21.7.2010, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Abyx @  21.7.2010,  08:59 Найти цитируемый пост)
о чем тема-то?

ветвь оффтопика, о том, как сделать foreach с естественным поведением для  собственных, не стл-совместимых контейнеров, используя только средства 5ти летней давности и без "доп." библиотек (в том числе std и boost )
smile

Это сообщение отредактировал(а) mes - 21.7.2010, 10:19


--------------------
PM MAIL WWW   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1288 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.