2014-11-27 18 views
6

Sono molto dispiaciuto di aver fatto una domanda simile a un principiante, ma sto trovando informazioni contraddittorie online. Vorrei chiedere all'Università, ma è fuori fino a febbraio del prossimo anno.I vettori vengono ridimensionati automaticamente?

I vettori vengono ridimensionati automaticamente? Oppure è necessario controllare periodicamente la dimensione corrente e ridimensionarla quando è necessario più spazio. Sembra che mi stia ridimensionando automaticamente, ma non sono sicuro che sia una caratteristica o il compilatore che agita una bacchetta magica.

+2

Risposta breve: sì. –

+8

Si ridimensiona se si utilizza 'insert' o' push_back', ma non se si utilizza l'operatore subscript (come 'std :: map <>' fa). – ildjarn

+0

Per favore controlla: http://stackoverflow.com/questions/12271017/initial-capacity-of-vector-in-c per un'analisi completa. –

risposta

11

Se si utilizza push_back o insert, sì vettore si ridimensiona. Ecco una demo:

#include<iostream> 
#include<vector> 

using namespace std; 

int main() { 
    vector <int> a; 
    a.push_back(1); 
    a.push_back(2); 
    a.push_back(3); 
    for (int value : a) { 
     cout << value << " "; 
    } 
    cout << endl << "Current size " << a.size() << endl; 
    return 0; 
} 

Dà uscita come:

1 2 3 
Current size 3 

ricordo ora se lo fai a[3] = 5. Non ridimensionerà automaticamente il tuo vettore.
Inoltre, è possibile ridimensionare manualmente il vettore se lo si desidera. Per la demo aggiungi il seguente codice al codice sopra.

a.resize(6); 
for (int value : a) { 
    cout << a << " "; 
} 
cout << endl << "Current size " << a.size() << endl; 

Ora il risultato sarà:

1 2 3 
Current size 3 
1 2 3 0 0 0 
Current size 6 

E pensare che hai la tua risposta.

+0

Nit pick: 'vector :: iterator it;' ... 'per (it = a.begin(); it :: iterator it = a.begin(); it! = a.end(); ++ it) '. (Definendo la variabile nel più stretto ambito utile, '! =' è idiomatica in quanto funziona per tutti i contenitori Standard, '++ it' per evitare l'affidamento sull'ottimizzatore per eliminare temporaneamente). –

+0

O anche per intervallo 'for (const auto & e: a) {std :: cout << e <<" "; } 'dal C++ 11. – Jarod42

+0

@TonyD Io principalmente codice in 'C' e sono nuovo in' C++ ', quindi la maggior parte del mio codice' C++ 'assomiglia a' C'. Inoltre non influisce sulla risposta. Comunque, grazie per averlo menzionato, lo aggiornerò. –

5

I vettori vengono ridimensionati automaticamente?

Sì, lo fanno, e si può convincersi di quel molto facilmente:

std::vector<int> squares; 
for (int i = 0; i < 100; ++i) 
{ 
    squares.push_back(i * i); 
    std::cout << "size: " << squares.size() << "\n"; 
} 
Problemi correlati