Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: ++i vs i++  (Citit de 7001 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
sir_icemaster
Strain


Karma: -2
Deconectat Deconectat

Mesaje: 9



Vezi Profilul
« : Aprilie 16, 2007, 17:09:48 »

Am auzit ca e mai recomandat ++i decat i++, beneinteles, cand ambele optioni sunt disponibile. E mai rapid sau e doar o chestie de design?
« Ultima modificare: Aprilie 16, 2007, 17:14:07 de către George Guraliuc » Memorat
CezarMocan
Nu mai tace
*****

Karma: 252
Deconectat Deconectat

Mesaje: 567



Vezi Profilul
« Răspunde #1 : Aprilie 16, 2007, 17:11:26 »

E mai rapid.
Memorat
marcelcodrea
Nu mai tace
*****

Karma: 173
Deconectat Deconectat

Mesaje: 217



Vezi Profilul
« Răspunde #2 : Aprilie 16, 2007, 17:43:26 »

S-a mai discutat despre asta aici : http://infoarena.ro/forum/index.php?topic=683.0

Mircea Pasoi zicea ca se indoieste ca s-ar simti diferenta ....nu stiu ce parere aveti voi, dar eu il cred ! 
Totusi e util pentru a-ti da colegii "pe spate" atunci cand implementezi la tabla !  Smile
Memorat
Florian
Nu mai tace
*****

Karma: 125
Deconectat Deconectat

Mesaje: 832



Vezi Profilul
« Răspunde #3 : Aprilie 16, 2007, 18:41:30 »

Ai dreptate! Iar dak mai pun un "int main()" si un "return 0" deja incep sa creada k scriu tampenii =)) Evil or Very Mad
Memorat
wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« Răspunde #4 : Aprilie 16, 2007, 19:45:51 »

Chiar e mai rapid ++i. Mie mi s-a intamplat sa iau 90 cu i++, sa modific in ++i si sa iau 100.
Memorat

omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
Florian
Nu mai tace
*****

Karma: 125
Deconectat Deconectat

Mesaje: 832



Vezi Profilul
« Răspunde #5 : Aprilie 16, 2007, 20:42:30 »

Interesanta faza... Think.. De akum o sa incep sa lucrez si eu cu ++i..nu am nimik de pierdut...poate am kiar de castigat... Totusi cred k ai avut norok..de obicei testele nu sunt concepute pt a face programul sa pice din cauza a doi de "+" si a unui "i"...orikum..dak ai norok.. wink
Memorat
wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« Răspunde #6 : Aprilie 16, 2007, 21:13:21 »

Era chiar la limita sursa si cum aveam un for destul de mare (nu mai stiu exact... oricum era ceva gen 100.000) s-a simtit diferenta.
Memorat

omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
marcelcodrea
Nu mai tace
*****

Karma: 173
Deconectat Deconectat

Mesaje: 217



Vezi Profilul
« Răspunde #7 : Aprilie 16, 2007, 22:33:24 »

Am facut o mica sursa pentru a analiza timpii de executie:

Cod:
#include<stdio.h>
#include<time.h>
long long i,j,t1,t2,k;
int main()
{
 freopen("","r",stdin);
 freopen("","w",stdout);
 for(k=1;k<=10;k++)
 {
 t1=clock();
 scanf("%lld",&j);
 for(i=1;i<=j;i++);//sau ++i
  t2=clock();
 printf("%.6f\n",(t2-t1)/18.2);
 }
 return 0;
}

Pentru fisierul de intrare care contine numerele :

Cod:
1000000000
1500000000
2000000000
20000
50000000
200000000
2500000000
450000000
500000000
900000000

Timpii de executie pentru ++i

Cod:
46.153846
69.230769
92.032967
0.000000
2.197802
9.340659
115.109890
20.879121
23.076923
41.483516

Timpii de executie pentru i++

Cod:
48.626374
72.802198
96.978022
0.000000
2.197802
9.890110
121.703297
21.978022
24.175824
43.956044

Memorat
sir_icemaster
Strain


Karma: -2
Deconectat Deconectat

Mesaje: 9



Vezi Profilul
« Răspunde #8 : Aprilie 17, 2007, 16:10:06 »

Deci ++i e putin mai rapid. Inseamna ca se merita sa folosesti ++i.
Memorat
Florian
Nu mai tace
*****

Karma: 125
Deconectat Deconectat

Mesaje: 832



Vezi Profilul
« Răspunde #9 : Aprilie 17, 2007, 16:21:04 »

Asa e! pe situatii de acestea ff mari se simte diferenta din plin.. Thumb up dupa kum am putut observa... Whistle
Memorat
domino
Echipa infoarena
Nu mai tace
*****

Karma: 281
Deconectat Deconectat

Mesaje: 1.340



Vezi Profilul WWW
« Răspunde #10 : Aprilie 17, 2007, 16:22:33 »

Din cate vad eu, prima diferenta se face pe la 200.000.000 de iteratii , desi este o diferenta foarte mica (cam de 5%). Chiar nu cred ca se poate spune ca se merita sa folosesti ++i in ideea de a obtine timpi de rulare mai mici , mai ales la problemele de algoritmica.

Later edit:
Asa e! pe situatii de acestea ff mari se simte diferenta din plin.. Thumb up dupa kum am putut observa... Whistle

Din plin? Diferenta este cam de 5%. Nu prea am vazut probleme cu limita de timp peste cateva secunde.. iar pana in 20 de secunde diferenta este aproape insesizabila.
« Ultima modificare: Aprilie 17, 2007, 19:32:07 de către Bogdan Tataroiu » Memorat
silviug
Echipa infoarena
Nu mai tace
*****

Karma: 193
Deconectat Deconectat

Mesaje: 485



Vezi Profilul
« Răspunde #11 : Aprilie 17, 2007, 20:10:32 »

Intr-adevar e mai rapid "++i". E drept, diferenta este insesizabila daca i este int.

Recomandarea mea: obisnuiti-va sa scrieti "++i" pentru ca diferentele pot fi majore daca i nu este de tip intreg. De exemplu, in cazul iteratorilor diferenta incepe sa fie sesizabila. Asta sa nu mai discutam daca va definiti voi un obiect mare pe care supraincarcati operatorii astia si copierea e costisitoare (de exemplu, clasa de numere mari).

Silviu
Memorat

"Don't gain the world and lose your soul, wisdom is better than silver or gold." [Bob Marley - Jamaican reggae musician & singer (1945 - 1981)]
wickedman
Echipa infoarena
Nu mai tace
*****

Karma: 227
Deconectat Deconectat

Mesaje: 670



Vezi Profilul WWW
« Răspunde #12 : Aprilie 18, 2007, 13:41:23 »

Vis-a-vis de exemplul cu int-uri de mai sus, daca mai si faci ceva in bucla aia, timpul castigat per numar de iteratii e mult mai mic.
Memorat
svalentin
Nu mai tace
*****

Karma: 88
Deconectat Deconectat

Mesaje: 704



Vezi Profilul
« Răspunde #13 : Aprilie 19, 2007, 17:14:04 »

Repet ce a zis si Silviu, daca i nu este int, ci alt tip de date, diferenta poate fi majora. De exemplu pentru "rope" din STL se recomanda sa folosesti de cate ori este posibil pre-incrementation fata de post-incrementation.
Citat din mesajul lui: STL rope documentation
Iterators are on the order of a dozen words in size. This means that copying them, though not tremendously expensive, is not a trivial operation. Avoid postincrementing iterators; use preincrement whenever possible.
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines