2010-07-22 23 views
7

Sto codificando in C++ e ho bisogno di una memorizzazione dinamica dei dati, come ArrayList in C# o Java.Dati dinamici in C++

Qualcuno può aiutarmi? Non sono sicuro di cosa usare. Grazie!

+8

[tempo per ottenere un buon libro.] (Http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) :) – GManNickG

risposta

8

Si sta cercando std::vector. Puoi leggere here su di esso (scorrere verso il basso su quella pagina per visualizzare una descrizione delle sue funzioni).

I vettori dispongono di una ricerca costante. L'inserimento/rimozione è veloce alla fine di un vettore, ma (come il link che ho pubblicato spiega più dettagliatamente) è altrimenti più lento. Inoltre, i vettori devono essere ridimensionati man mano che memorizzi dati aggiuntivi in ​​essi, quindi vale la pena esaminare reserve (questo è come il numero ensureCapacity di ArrayLists). Si noti che questo ridimensionamento è automatico - reserve esiste solo per motivi di prestazioni.

4

std::vector è il tuo amico, here è un tutorial.

1

o std::list per quella materia ...

+1

Se si desidera un'alternativa, 'std :: deque' è probabilmente la seconda scelta per l'archiviazione dinamica semplice. Una lista collegata è il contenitore di scelta solo in alcune situazioni, per lo più piuttosto insolite. Vedi: http://stackoverflow.com/questions/2429217/under-what-circumstances-are-linked-lists-useful –

0

Se sei davvero solo un principiante, si dovrebbe iniziare con le basi: arrays.

Una volta capito cosa sta succedendo sotto, allora dovresti passare all'STL e ai contenitori (come vector) come suggeriscono tutti gli altri.

+2

Direi proprio il contrario: inizia con il vettore. Ad un certo punto nel futuro (probabilmente lontano), potresti avere una ragione per usare un array, ma per i principianti (e per i programmatori più avanzati, per quella materia) è meglio evitarlo. –

+2

Penso che questo sia definitivamente in discussione. Per comprendere gli array in modo dinamico (e usarli in sicurezza), è necessario comprendere la gestione manuale della memoria ad un livello molto pratico (puntatori, nuovi, cancella, referenziamento, dereferenziazione, ecc.).Si può spiegare come i vettori funzionano con concetti più generali/semplici, che forniscono una buona introduzione alla gestione della memoria. Immagino sia per questo motivo che molti dei testi C++ altamente raccomandati (Accelerated C++ e Stroustrup's Programming: Principles and Practice) introducono std :: vector molto prima degli array. – MarkD

+0

@Jerry, MarkD: Sono corretto quindi. Nelle mie lezioni di Comp Sci, ci hanno insegnato matrici, poi puntatori, poi modelli, quindi * a stento * sfiorato su STL. Il pensiero era che una volta che hai capito le basi, potresti capire meglio come usare e lavorare la libreria di livello superiore. In retrospettiva, però, non sono molto d'accordo con ciò che ci hanno insegnato: il mio professore * ha insistito * sul fatto che ho messo un metodo const "ostream & display (ostream & out) sulla nostra classe' Vector' di array statico, così come un 'amico ostream e operatore << (ostream e out, const Type & x) {return x.display (out); } '. –

0

Bene, ci sono 2 opzioni che compaiono subito.

Il primo è utilizzare std :: vector. Un vettore funziona fondamentalmente come un array (eccetto per la dichiarazione e la sintassi delle chiamate) sulla superficie. Le 2 cose che vuoi sapere sui vettori è che puoi chiamare una funzione che aumenterà le dimensioni del tuo vettore (aggiungi indici alla fine). L'altra cosa è che per creare un vettore bidimensionale bisognerebbe dichiarare un vettore di vettori. Ciò consente anche di avere più di 2 dimensioni.

L'altra cosa che è possibile utilizzare è std :: list. Questo è solo un elenco collegato in cui è possibile inserire ed eliminare elementi.

Problemi correlati