Форум программистов, компьютерный форум, киберфорум
Наши страницы

не использовать do/while ? бред ! - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ В матрице удалить строки с элементами на главной диагонали, превышающими заданную величину http://www.cyberforum.ru/cpp-beginners/thread2772.html
В матрице удалить строки с элементами на главной диагонали, превышающими заданную величину, а затем в качестве первой вставить строку из максимальных элементов соответствующих столбцов.(Для...
C++ Поиск строк Здраствуйте, подскажите какие есть реализации или как это сделать примерно. Задача в поиске строк в файле, можно воспользоватся регулярными выражениями или алгоритмами типа бойра-Мура, но файл нельзя... http://www.cyberforum.ru/cpp-beginners/thread2768.html
C++ Не могу сделать exe
При компиляций моего пректа exe не создаётся.Выдаёт ошибки,которые я не знаю как исправить...http://dump.ru/files/g/g2067785368/ Программа должна выполнять функцию Надо ввести значение переменной...
Где можно скачать программу, чтобы начать учиться работать в С++? C++
собственно ногами не пинать...вопрос полного нуля в этой области , но подскажите где можно скачать программу для того что бы начать учиться работать в С++... может выразился сумбурно...но за рание...
C++ Где можно скачать элекронные книги, конспекты и тд? http://www.cyberforum.ru/cpp-beginners/thread2715.html
Уважаеммые формчане, нужна помощь по основам программирования на С, ищу ссылки где можно скачать элекронные книги, конспекты и тд и тп. ничего сложного и желательно кратко. заренее благодарен
C++ Помогите с курсовой на тему! Отражение движущегося случайным образом шарика от геометрических фигур статично располагающихся в комнате (треугольник, квадрат, круг) с использованием библиотеки функций OPENGL. подробнее

Показать сообщение отдельно
гость
0 / 0 / 0
Регистрация: 17.04.2015
28.08.2007, 00:11
да этот ответ меня действительно поразил на некоторое время, а именно проверка указанных тестов, спасибо
кстати it (0) это выполнение конструктора при инициализации, раз Вы пользуетесь компилятором gcc, то я могу сделать предположение что в C нету конструкторов из за отсутствия классов (если я не ошибаюсь) - далее я использую компилятор g++ 4.1.2 и чтож пусть будет it = 0, теперь к делу )

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

сразу замечу что зачастую я выбираю цикл while если ситуация того требует, а не if { do { } while (); }; , но если я пишу программу не спеша я её маниакально пытаюсь ускорить во времени но в любом случае в первую очередь - выше скорости стоит чёткая и стабильная робота программы, и я никогда бы не написал бы так
C++
1
for( it = 0; [b]it < 4 && (major[it] = 1)[/b]; ++it );
что выполниться первым ? 4 И то что в скобках или сравнение с it ? несмотря на что, что якобы это можно определить по приоритетам операций я всегда стараюсь такого избегать после всех испытанных различий компиляторов в таких тонких моментах

и ещё - в первом варианте инкремент i постфиксный, в другом префиксный, по моему мнению префиксный инкремент лучше - он быстрее и возвращает указатель, потому использую его

затем мне бросилось в глаза вот что - после итераций в внутреннем цикле Вы не онуляете переменную i - ведь далее с её помощью будет попытка доступа к несуществующим элементам 5, 6, 7 .. 39999999

таким образом я внёс некоторые правки в код - я добавил скобки к (it < 4) а также добавил онуление i, изменил i++ на ++i и как - то более структурно записал всё, иначе для меня код просто нечитабельный
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main( void ) {
   int i = 0, j = 0, major[4];
#ifdef TEST
   do {
      i = 0;
      do {
         major[i] = 1;
     ++i;
      } while ( i < 4 );
      ++j;
   } while( j < 10000000 );
#else
   for( ; j < 10000000; ++j ) {
      for( i = 0; (i < 4) && ( major[i] = 1 ); ++i );
   };
#endif
   return 0;
};
пробую теперь
g++ sol.cpp -o sol && time ./sol = 0.23s
g++ sol.cpp -o sol -D TEST && time ./sol = 0.20s

хм...
всётаки for медленнее ...
чтоже так затормозило его ? скобки или онуление i ?

ах да насчёт двойной проверки - это да, я просто хотел показать что условие копируется в обе части кода и работает структура так же как while

я конечно не спорю что это всё не актуально при олимпиадном программировании, или при написании курсовых робот, но для больших проектов ... написанный код будет выполняться миллионы раз и экономия миллисекунды даст ведь о себе знать
хехе снять розовые очки ?
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.