/ / Slučka začínajúca od 0 alebo 1? Ktorý a prečo? - c ++, výkon, zabudovaný

Smyčka začína od 0 alebo 1? Ktorý a prečo? - c ++, výkon, vložený

Väčšina slučiek for, ktoré som čítal / písal, sa začínaod 0 a aby som bol spravodlivý, väčšina kódu, ktorý som čítal, sa používa pre vstavané systémy a boli v C / C ++. Vo vstavaných systémoch nie je čitateľnosť v niektorých prípadoch taká dôležitá ako účinnosť kódu. Preto si nie som istý, ktorý z nasledujúcich prípadov by bol lepšou voľbou:

verzia 1

for(i = 0; i < allowedNumberOfIteration; i++)
{
//something that may take from 1 iteration to allowedNumberOfIteration before it happens
if(somethingHappened)
{
if(i + 1 > maxIteration)
{
maxIteration = i + 1;
}
}
}

Verzia 2

for(i = 1; i <= allowedNumberOfIteration; i++)
{
//something that may take from 1 iteration to allowedNumberOfIteration before it happens
if(somethingHappened)
{
if(i > maxIteration)
{
maxIteration = i;
}
}
}

Prečo je podľa mňa prvá verzia lepšia:

1. Väčšina slučiek začína číslom 0. Takže možno skúsení programátori zistia, že je lepšie, ak začína od 0.

Prečo je podľa mňa lepšia druhá verzia:

  1. Aby sme boli spravodliví, keby bolo vo funkcii pole začínajúce od 0 by bolo skvelé, pretože index polí začína od nuly. Ale v v tejto časti kódu sa nepoužívajú žiadne polia.

  2. Druhá verzia vyzerá jednoduchšie, pretože nemusíte myslieť na tlačidlo +1.

Veci, ktoré neviem

1) Existuje nejaký výkonnostný rozdiel?

2) Ktorá verzia je lepšia?

3) Existujú nejaké ďalšie aspekty, ktoré by sa mali brať do úvahy pri rozhodovaní o východiskovom bode?

4) Robím si príliš veľké starosti?

odpovede:

10 pre odpoveď č. 1

1) Nie

2) Ani jeden

3) Polia v jazykoch C a C ++ sú založené na nule.

4) Áno.


4 pre odpoveď č. 2

Polia všetkých foriem v C ++ sú nuly. Tj. ich index začína na nule a ide až do veľkosti poľa mínus jedna. Napríklad pole piatich prvkov bude mať indexy 0 na 4 (Vrátane).

že preto väčšina cyklov v C ++ začína na nule.


Pokiaľ ide o váš konkrétny zoznam otázok, pre 1 tam sila byť výkonnostným rozdielom. Ak začnete slučku o 1 potom možno budete musieť odpočítať 1 v každom iterátore, ak použijete hodnotu ako index poľa. Alebo ak zväčšíte veľkosť polí, použijete viac pamäte.

pre 2 naozaj to záleží na tom, čo opakujete. Je to nad indexmi polí, potom je slučka začínajúca na nule zjavne lepšia. Možno budete musieť začať slučku na akýkoľvek hodnotu, naozaj záleží na tom, čo robíte a na probléme, ktorý sa snažíte vyriešiť.

pre 3, čo musíte zvážiť, je to, čo ste použitím slučka pre.

a 4, možno trochu. ;)