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

Поиск:

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


Бывалый
*


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

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



доброго дня, 
дано:
1) строки рамером ~100
2) количество строк от ~100К

какой вариант предпочтительнее ?
вариант №1
Код

while(*st)
{
cout << *(st++);
}


Вариант №2
Код

for (register int i=0;st[i];i++)
{
cout << st[i];
}


Вариант №3 - ?

P.S. в С++ новичок.
 
--------------------
Участник движения Культура Вождения
PM   Вверх
azesmcar
Дата 20.7.2010, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

Репутация: 52
Всего: 211



Цитата(dva300 @  20.7.2010,  14:54 Найти цитируемый пост)
1) строки рамером ~100
2) количество строк от ~100К

о чем речь? о каких строках?

Цитата(dva300 @  20.7.2010,  14:54 Найти цитируемый пост)
какой вариант предпочтительнее ?

в конкретном случае практически одно и тоже, я бы предпочел первый, просто дело вкуса.
и ключевое слово register не нужно.

PM   Вверх
borisbn
Дата 20.7.2010, 15:32 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 21
Всего: 135



Цитата(dva300 @  20.7.2010,  14:54 Найти цитируемый пост)
какой вариант предпочтительнее ?

тот, который тебе больше нравится, более понятен при прочтении, т.к. компилятор из этих вариантов сделает одно и то же.
Вот azesmcar нравится первый вариант, мне - второй, а на производительности это не скажется.

И вообще, преждевременная оптимизация - источник зла.
IMHO оптимизировать следует только тогда, когда всё уже работает, работает правильно, а производительности не хватает.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
djamshud
Дата 20.7.2010, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Вариант #3 - foreach. Мне он больше всего нравится.


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


Бывалый
*


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

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



to azesmcar
Цитата

о чем речь? о каких строках?

обычный текст. кирилицы нет.

Цитата
в конкретном случае практически одно и тоже, я бы предпочел первый, просто дело вкуса.
и ключевое слово register не нужно.

не совсем понял относительно не нужности register.  в книжке прочитал что обьявленные таким образом переменные хранятся в регисте ЦП а не пямяти что должно увеличивать скорость работы с такими переменными. или речь идет о том что в данном конкретном случае это не повлияет на работу ? 

to djamshud
в с++ о foreach я не слышал. 
если это в сторону Perl/c#то условия задачи не позволяют на них.


Это сообщение отредактировал(а) dva300 - 20.7.2010, 16:05
--------------------
Участник движения Культура Вождения
PM   Вверх
azesmcar
Дата 20.7.2010, 16:08 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

Репутация: 52
Всего: 211



Цитата(dva300 @  20.7.2010,  16:04 Найти цитируемый пост)
обычный тескт. кирилицы нет.

ааа...это вариантов касалось? smile только дошло, в принципе количество строк не влияет на ответ, все равно количество итераций одно и тоже.

Цитата(dva300 @  20.7.2010,  16:04 Найти цитируемый пост)
не совсем понял относительно не нужности register.  в книжке прочитал что обьявленные таким образом переменные хранятся в регисте ЦП а не пямяти что должно увеличивать скорость работы с такими переменными. 

Он не указывает, он рекомендует. Компилятор скорее всего проигнорирует эту запись, так как любой современный компилятор в состоянии сам решить что и как оптимизировать, причем сделает это лучше программиста, так как ему известно больше. Оптимизатор сам этим займется, register писать не надо.
PM   Вверх
borisbn
Дата 20.7.2010, 16:10 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 21
Всего: 135



Цитата(dva300 @  20.7.2010,  16:04 Найти цитируемый пост)
в книжке прочитал что обьявленные таким образом переменные хранятся в регисте ЦП а не пямяти

наверное оч. старая книжка, потому, что на заре создания компиляторов так и было, сейчас же эта переменная и так будет храниться в регистре. можешь проверить: включить компиляцию в ассемблер и посмотреть сгенерённый код.
Цитата(dva300 @  20.7.2010,  16:04 Найти цитируемый пост)
в с++ о foreach я не слышал. 

Вот foreach в Си++


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
djamshud
Дата 20.7.2010, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



>в с++ о foreach я не слышал.

Его можно сделать через макрос.

Добавлено через 1 минуту и 37 секунд
>Вот foreach в Си++

И не только через макрос :).

Добавлено через 3 минуты и 5 секунд
Хотя макросовый foreach намного удобнее в использовании имхо.

Код

foreach(vector,item)
printf(item);



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


uploading...
****


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

Репутация: 52
Всего: 211



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

Добавлено через 1 минуту и 37 секунд
>Вот foreach в Си++

И не только через макрос smile.

не вижу смысла, есть же лямбда (почти есть).
PM   Вверх
dva300
Дата 20.7.2010, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата

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

хм... полный справочник по С++ Шилдта этого года....
хотя возможно я просто выдал желаемое за действительное... стр.53 в скобках - В стандарте С++ говориться, что спецификатор register - это подсказка компилятору, что данный обьект используется очень интенсивно.....

Это сообщение отредактировал(а) dva300 - 20.7.2010, 16:18
--------------------
Участник движения Культура Вождения
PM   Вверх
borisbn
Дата 20.7.2010, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 21
Всего: 135



djamshud, я его так и использую, только писал не я, а тролли. кстати, сейчас посмотрел на реализацию троллей - волосы дыбом. ЧТО ЭТО ? ? ?
Код

#  define Q_FOREACH(variable,container)                                                             \
    if(0){}else                                                                                     \
    for (const QForeachContainerBase &_container_ = qForeachContainerNew(container);                \
         qForeachContainer(&_container_, true ? 0 : qForeachPointer(container))->condition();       \
         ++qForeachContainer(&_container_, true ? 0 : qForeachPointer(container))->i)               \
        for (variable = *qForeachContainer(&_container_, true ? 0 : qForeachPointer(container))->i; \
             qForeachContainer(&_container_, true ? 0 : qForeachPointer(container))->brk;           \
             --qForeachContainer(&_container_, true ? 0 : qForeachPointer(container))->brk)



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
djamshud
Дата 20.7.2010, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Что-то сложное, лень разбирать. Для своих типов я использую такой:

Код

#define foreach(container,value) \
for(size_t i=0,keep=1;i<(container).count();i++,keep=1) \
for(typeof((container)[0]) &value=(container)[i];keep!=0;keep=0)


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


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


Эксперт
****


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

Репутация: 21
Всего: 135



djamshud, typeof это из 0x++ ? у меня не компилируется на MSVC 2008 и на g++ 4.1.2


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
djamshud
Дата 20.7.2010, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



http://gcc.gnu.org/onlinedocs/gcc/Typeof.html

Вообще-то это гцц-шное расширение.


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


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


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

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



Цитата(djamshud @  20.7.2010,  15:23 Найти цитируемый пост)
#define foreach(container,value) \
for(size_t i=0,keep=1;i<(container).count();i++,keep=1) \
for(typeof((container)[0]) &value=(container)[i];keep!=0;keep=0)


Цитата(djamshud @  20.7.2010,  15:23 Найти цитируемый пост)
одновременно не выпасть из "традиционного" поведения конструкций. 

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


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

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

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

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

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


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

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


 




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


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

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