Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
AK3RN
307 / 18 / 3
Регистрация: 01.05.2010
Сообщений: 250
#1

C или C++(не холивар) - C++

19.11.2010, 18:08. Просмотров 437. Ответов 3
Метки нет (Все метки)

Здравствуйте.
Участвую в различных олимпиадах по программированию, пишу обычно на C++, используя все его вкусности в виде STL, ООП, темплэйтов и проч. Накануне в двух задачах не уложился в ограничение по времени(нужно было макс. 1 секунду на выполнение программы, у меня же 1.07 и 1.5). Отсюда возникает вопрос: что более целесообразно использовать на олимпиаде, что быстрее: C или C++?
Конечно, можно сослаться не неоптимизированный алгоритм, но оптимизировать, честно говоря, некогда. Поэтому смотрю в сторону С, но очень не хочется лишаться удобств, предоставляемых С++. Подмогите, пожалуйста.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2010, 18:08     C или C++(не холивар)
Посмотрите здесь:

Холивар и не очень важная тема. Просто хочу обсудить - C++
Посмотрел видос и заинтересовала как это можно реализовать.(Если вообще это возможно). Просто охота услышать другие варианты.

Количество нулевых, или положительных, или отрицательных элементов в двумерном массиве - C++
Здравствуйте. Мне нужно составить программу, которая подсчитывает или количество нулевых, или количество положительных, или количество...

Как округлить число до десятых, или сотых, или дальше.. - C++ Builder
Собственно есть флоат число. Допустим это 78,0985321436 ... надо сделать чтобы вывело 78,099 допустим.. или же 78,0985 ну и так далее......

Создать программу при нажатии на кнопку м или ж выводились муржской или женский пол. - C++
Создать программу при нажатии на кнопку м или ж выводились муржской или женский пол.

Или я дурак или лыжи не едут, склоняюсь к первому. - C++
говорит необъявленный идентификатор относительно всех функций класса notebook. Пробовал все конструкторы методов перекинуть в хедер эффект...

При вводе того или иного пароля открывать тот или иной txt-файл - C++
Добрый вечер. Нужно написать программу, которая будет при вводе того или иного пароля открывать тот или иной .txt файл. Например: ...

Вместо 1 или 0 выдавать true или false - C++
Создать функцию, которая будет иметь 1 целочисленный параметр А, и в качестве своего значения возвращать true/false если число А...

OpenGL или DirectX или все вместе - C++
Писал и на Direct3D и на OpenGL графику, но появилась задача цель которой составляет следующее: В программе должен быть выбор какую...

Язык скриптовый или обычный, или дополнение c++ - C++
Всех сердечно приветствую! Слышал, что можно дополнить c++, введя новые типы данных, функции и т.д. Для примера приведу код языка...

Холивар или обделение многомерного динамического массива
я чо подумал очему бы microsoft сразу не сделать динамическое выделение под двумерный массив? заместо шамаства с бубном просто двумерный...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ISergey
Maniac
Эксперт С++
1373 / 884 / 52
Регистрация: 02.01.2009
Сообщений: 2,652
Записей в блоге: 1
19.11.2010, 18:11     C или C++(не холивар) #2
AK3RN, Для большой скорости код должен быть линейным.. чем меньше вызовов функций тем быстрее..
Fedis
608 / 88 / 2
Регистрация: 08.07.2010
Сообщений: 1,893
19.11.2010, 19:29     C или C++(не холивар) #3
чем меньше вызовов функций тем быстрее..
А вы не подключайте ненужные библиотеки и вызовов будет меньше. Лучше писать на C++ он чем-то легче Си, а библиотека iostream работает быстрее, чем Сишная stdio.
ISergey
Maniac
Эксперт С++
1373 / 884 / 52
Регистрация: 02.01.2009
Сообщений: 2,652
Записей в блоге: 1
19.11.2010, 20:01     C или C++(не холивар) #4
Цитата Сообщение от i.c Посмотреть сообщение
А вы не подключайте ненужные библиотеки и вызовов будет меньше
Я имел в виду свои функции..

Вот бессмысленный код.. (Заведомо отключил все оптимизации)

C++
1
2
3
4
5
6
7
8
9
int foo(int i) { return i + i; }
 
int main()
{
    int a = 0;
    for(int i = 0; i < 100; ++i)
        a = a + foo(i);
    return 0;
}
Превращается в
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
;int main()
;{
00411420  push        ebp  
00411421  mov         ebp,esp 
00411423  sub         esp,0D8h 
00411429  push        ebx  
0041142A  push        esi  
0041142B  push        edi  
0041142C  lea         edi,[ebp-0D8h] 
00411432  mov         ecx,36h 
00411437  mov         eax,0CCCCCCCCh 
0041143C  rep stos    dword ptr es:[edi] 
;   int a = 0;
0041143E  mov         dword ptr [a],0 
;   for(int i = 0; i < 100; ++i)
00411445  mov         dword ptr [i],0 
0041144C  jmp         main+37h (411457h) 
0041144E  mov         eax,dword ptr [i] 
00411451  add         eax,1 
00411454  mov         dword ptr [i],eax 
00411457  cmp         dword ptr [i],64h 
0041145B  jge         main+51h (411471h) 
;       a = a + foo(i);
0041145D  mov         eax,dword ptr [i] 
00411460  push        eax  
00411461  call        m_atoi (4111E0h) 
00411466  add         esp,4 
00411469  add         eax,dword ptr [a] 
0041146C  mov         dword ptr [a],eax 
0041146F  jmp         main+2Eh (41144Eh) 
;   return 0;
00411471  xor         eax,eax 
;}
00411473  pop         edi  
00411474  pop         esi  
00411475  pop         ebx  
00411476  add         esp,0D8h 
0041147C  cmp         ebp,esp 
0041147E  call        @ILT+320(__RTC_CheckEsp) (411145h) 
00411483  mov         esp,ebp 
00411485  pop         ebp  
00411486  ret    
 
...
 
;int foo(int i) { return i + i; }
004113B0  push        ebp  
004113B1  mov         ebp,esp 
004113B3  sub         esp,0C0h 
004113B9  push        ebx  
004113BA  push        esi  
004113BB  push        edi  
004113BC  lea         edi,[ebp-0C0h] 
004113C2  mov         ecx,30h 
004113C7  mov         eax,0CCCCCCCCh 
004113CC  rep stos    dword ptr es:[edi] 
004113CE  mov         eax,dword ptr [i] 
004113D1  add         eax,dword ptr [i] 
004113D4  pop         edi  
004113D5  pop         esi  
004113D6  pop         ebx  
004113D7  mov         esp,ebp 
004113D9  pop         ebp  
004113DA  ret
Убрав функцию получим более мене нормальный вариант..
C++
1
2
3
4
5
6
7
int main()
{
    int a = 0;
    for(int i = 0; i < 100; ++i)
        a = a + (i + i);
    return 0;
}
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
;int main()
;{
00411820  push        ebp  
00411821  mov         ebp,esp 
00411823  sub         esp,0D8h 
00411829  push        ebx  
0041182A  push        esi  
0041182B  push        edi  
0041182C  lea         edi,[ebp-0D8h] 
00411832  mov         ecx,36h 
00411837  mov         eax,0CCCCCCCCh 
0041183C  rep stos    dword ptr es:[edi] 
;   int a = 0;
0041183E  mov         dword ptr [a],0 
;   for(int i = 0; i < 100; ++i)
00411845  mov         dword ptr [i],0 
0041184C  jmp         main+37h (411857h) 
0041184E  mov         eax,dword ptr [i] 
00411851  add         eax,1 
00411854  mov         dword ptr [i],eax 
00411857  cmp         dword ptr [i],64h 
0041185B  jge         main+4Bh (41186Bh) 
;       a = a + (i + i);
0041185D  mov         eax,dword ptr [i] 
00411860  add         eax,dword ptr [i] 
00411863  add         eax,dword ptr [a] 
00411866  mov         dword ptr [a],eax 
00411869  jmp         main+2Eh (41184Eh) 
;   return 0;
0041186B  xor         eax,eax 
;}
0041186D  pop         edi  
0041186E  pop         esi  
0041186F  pop         ebx  
00411870  mov         esp,ebp 
00411872  pop         ebp  
00411873  ret
Yandex
Объявления
19.11.2010, 20:01     C или C++(не холивар)
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru