2013-03-06 8 views

risposta

27

Le funzioni begin() e end() definiscono un metà intervallo aperto ([begin, end)), il che significa:
La gamma include primo elemento ma esclude l'ultimo elemento. Quindi, il nome oltre la fine.

enter image description here

Il vantaggio di un intervallo aperto metà è:

  1. Evita una gestione speciale per intervalli vuoti. Per intervalli vuoti, begin() equivale a end().

  2. rende il criterio finale semplice per cicli che un'iterazione sugli elementi: Le anse semplicemente continuano fintanto end() non viene raggiunto

+2

+1 Ottima risposta. – Nawaz

+0

L'illustrazione odora Josuttis :) – fredoverflow

+1

Non solo 'begin()' e 'end()'; generalmente, '[begin, end)' definisce una ** sequenza ** di valori, indipendentemente da dove provengono gli iteratori o dove sono contenuti i valori. –

2

Letteralmente, perché punta un punto oltre la fine della matrice.

Viene utilizzato perché quell'elemento è vuoto e può essere iterato ma non dereferenziato.

int arry[] = {1, 2, 3, 4, /* end */ }; 
         ^^^^^^^ 
        std::end(arry) would point here. 
+0

Non solo array; l'iteratore 'fine' punta oltre la fine della sequenza di destinazione, indipendentemente da dove provengono gli iteratori o dove sono contenuti i valori. –

6

Perché non punta alla ultima elemento di un contenitore, ma da qualche parte passato l'ultimo elemento di un contenitore.

Se si denota end(), il risultato è comportamento non definito.

5

Come intervallo in matematica, stl utilizza [begin, end).

Ecco perché possiamo scrivere for (auto it = v.begin(); it != v.end(); ++it)

+1

Sì! La prima risposta che non parla di contenitori, che non sono necessari per creare sequenze. –

2

Aggiunta altro punto per le risposte corrette sopra. Anche questo è stato fatto per essere compatibile con gli array. Ad esempio, nel codice qui sotto:

char arr[5]; 
strcpy(arr, "eakgl"); 
sort(&arr[0], &arr[5]); 

Questo funziona bene.

Invece se si avevano dato:

sort(&arr[0], &arr[4]); 

sarebbe perdere l'ordinamento l'ultimo carattere.

Questo aiuta anche a rappresentare i contenitori vuoti in modo naturale.