2012-06-02 14 views
11

Di solito non sono sicuro quando è meglio usare l'uno rispetto all'altro. Entrambi sembrano fare le stesse cose in generale, ma il vettore è più flessibile in termini di cosa può fare? Quando gli array sono più appropriati?Quando utilizzare i vettori e quando utilizzare gli array in C++?

+1

Quasi mai utilizzare array è il mio suggerimento. Ma per array intendi 'type []' o 'std :: array'? –

+0

@ Tipo RichardJ.RossIII [] –

+0

La differenza principale tra un vettore e un array, in un senso C++, è che i vettori gestiscono automaticamente la memoria dinamica, mentre gli array sono corretti. – chris

risposta

14

preferisce generalmente sempre utilizzando std::vector<T> dalla distruzione sarà automatico una volta che il vettore esce portata e la memoria allocata sarà posto ordinatamente sul mucchio e tutta la memoria verrà gestito per te. std::vector<T> fornisce tutto ciò che si ottiene in un array e anche la garanzia che gli elementi vengano archiviati in modo contiguo nella memoria (ad eccezione di std::vector<bool>).

Nel caso di std::vector<bool> si devono stare attenti in quanto il codice come questo si romperà:

std::vector<bool> vb; 
vb.push_back(true); 
vb.push_back(false); 
vb.push_back(true); 
bool *pB = &vb[0]; 
if(*(pB+1)) 
{ 
    // do something 
} 

Il fatto è, std::vector<bool> non memorizza contigui bool s. Questa è un'eccezione nello standard che è stato risolto in C++ 11.

+2

Fortunatamente 'std :: vector ' è ancora una volta un vero contenitore in ** C++ 11 ** –

+0

@ K-ballo Right, post modificato per tenere conto di questo. –

+0

+1 per * verrà posizionato ** in modo ordinato ** sull'heap * (enfasi su miniera), il che significa che la scrittura accidentale all'esterno dell'array non distruggerà lo stack. –

2

Uso solo gli array quando si lavora con sistemi embedded o quando determinate API lo richiedono (ad esempio, li prendono come argomento per una funzione). Inoltre, se ci sono solo uno o due punti in cui avrei bisogno di utilizzare gli array, o non sono specificamente necessarie funzionalità vettoriali, è più sensato utilizzare gli array solo a causa del sovraccarico aggiuntivo di vector.h.

Altrimenti, basta usare vettori :)

+1

È possibile passare i vettori quando è in attesa di un array: 'someFunc (&v[0]);'. – chris

+0

@chris, molto vero. – kotakotakota

+0

L'altro punto è valido. A seconda di come e quanto spesso si sta utilizzando l'array, così come esigenze del programma, il sovraccarico di un vettore può essere eccessivo – chris

Problemi correlati