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

C++

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

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

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

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

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

Лучшие приемы написания скоростного кода. Немного холивар - VBA
начало холивара здесь Спасибо. Хотя часть кода можно написать короче. И работать, по идее будет быстрее. Я бы заменил на ...

Intel или AMD? R9-290 GAMING 4G или N780 или SLI? Комп за овер 50к - Игровой компьютер
Комп нужен для ИГР на 5лет примерно! 1) Смысл поста в том чтобы собрать системник чтоб каждая запчасть работала на все 100%, то есть...

Можно ли по названию платы,или по чипу,или по соккету,определить,поддерживает плата ХР или нет? - Материнские платы
Добрый день всем.Уважаемые знатоки,я заранее прошу у Вас прощенья,если заданный мной вопрос,тупой или глупый. Но поверьте,я уже замучился...

Получить из строки всё до пробела или запятой или точки или восклицательного знака - C#
Match m_ = Regex.Match(вопрос, @"Кто такой.(.{5})", RegexOptions.IgnoreCase | RegexOptions.Multiline); ...

По введённой букве определить её характеристики: большая или маленькая, гласная или согласная, звонкая или глухая и т.д - VBA
По введённой букве определить её характеристики: боль-шая или маленькая, гласная или согласная, звонкая или глухая и т.д.

3
ISergey
Maniac
Эксперт С++
1375 / 886 / 52
Регистрация: 02.01.2009
Сообщений: 2,661
Записей в блоге: 1
19.11.2010, 18:11 #2
AK3RN, Для большой скорости код должен быть линейным.. чем меньше вызовов функций тем быстрее..
0
Fedis
608 / 88 / 2
Регистрация: 08.07.2010
Сообщений: 1,893
19.11.2010, 19:29 #3
чем меньше вызовов функций тем быстрее..
А вы не подключайте ненужные библиотеки и вызовов будет меньше. Лучше писать на C++ он чем-то легче Си, а библиотека iostream работает быстрее, чем Сишная stdio.
0
ISergey
Maniac
Эксперт С++
1375 / 886 / 52
Регистрация: 02.01.2009
Сообщений: 2,661
Записей в блоге: 1
19.11.2010, 20:01 #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
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2010, 20:01
Привет! Вот еще темы с ответами:

По введённой букве определить её характеристики: боль-шая или маленькая, гласная или согласная, звонкая или глухая и т.д - VBA
По введённой букве определить её характеристики: большая или маленькая, гласная или согласная, звонкая или глухая и т.д

Игры зависают вместе с компьютером, или закрываются с сообщением об ошибке или без него, или вызывают BSOD - BSOD
Столкнулся тут с такой проблемой. Изначально проблемы были только с Dark Souls 3, а именно: 1) Игра просто закрывается. Без ошибок. 2)...

Огонь на Pascale (или ABC, или Free, или Turbo) - Pascal
Пожалуйста, обрадуйте кто нибудь, кодом Движения Огня на Pascale.

Открыть MS Word 2003 или 2007 или 2010 в XP или 7 - Delphi WinAPI
Всем привет! столкнулся с проблемой. Надо из делфи запустить мс ворд. Ну это не сложно. проблема в том, что я сижу на WinXP а вдруг в...


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

Или воспользуйтесь поиском по форуму:
4
Yandex
Объявления
19.11.2010, 20:01
Ответ Создать тему
Опции темы

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