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++?
risposta
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.
Fortunatamente 'std :: vector
@ K-ballo Right, post modificato per tenere conto di questo. –
+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. –
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 :)
È possibile passare i vettori quando è in attesa di un array: 'someFunc (&v[0]);'. – chris
@chris, molto vero. – kotakotakota
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
- 1. Quando utilizzare Meteor.methods e utilizzare gli stub
- 2. C++: quando utilizzare i puntatori?
- 3. Quando utilizzare C#/C++
- 4. Quando utilizzare JMS e quando utilizzare REST?
- 5. Quando utilizzare le categorie e quando utilizzare la sottoclasse?
- 6. Quando utilizzare SqlConnection.ClearAllPools() in C#
- 7. Quando utilizzare "nuovo" e quando non farlo, in C++?
- 8. Quando utilizzare i pairlist in R?
- 9. Quando utilizzare gli editor WYSIWYG?
- 10. Quando utilizzare gli indici compositi?
- 11. Quando utilizzare, non utilizzare, OneToOne e ManyToOne
- 12. Quando utilizzare limit e quando non su
- 13. Quando utilizzare extern "C" in C++?
- 14. Quando utilizzare e quando non utilizzare Python 3.5 `attendere '?
- 15. quando e perché utilizzare C# i metodi di accesso
- 16. Quando utilizzare l'array di byte e quando utilizzare lo streaming?
- 17. Quando utilizzare un modulo e quando utilizzare una classe
- 18. Obiettivo C quando utilizzare alloc e quando non su
- 19. PHP: quando utilizzare i tratti e quando utilizzare i metodi statici?
- 20. Quando utilizzare Class.isInstance() e quando utilizzare l'operatore instanceof?
- 21. Javascript quando utilizzare i prototipi
- 22. Quando utilizzare i file .xcconfig
- 23. Quando utilizzare i pacchetti DropWizard?
- 24. Quando utilizzare i componenti e quando utilizzare le estensioni in Yii?
- 25. Quando utilizzare extern "C" in parole semplici?
- 26. Quando utilizzare Proprietà e metodi?
- 27. Quando utilizzare socket.io e quando usare ajax
- 28. quando utilizzare respondsToSelector in Objective-C
- 29. Quando utilizzare NSNotificationCenter
- 30. Quando utilizzare Pointer-to-Pointer in C++?
Quasi mai utilizzare array è il mio suggerimento. Ma per array intendi 'type []' o 'std :: array'? –
@ Tipo RichardJ.RossIII [] –
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