Costruttori di un Vettore
Sintassi:
#include <vector> using namespace std; vector(); vector( const vector& c ); vector( size_type num, const T& val = T() ); template< typename input_iterator > vector( input_iterator start, input_iterator end ); ~vector();
Il costruttore di default non ha bisogno di argomenti e semplicemente crea una nuova istanza di un vettore
Il secondo costruttore è un 'default copy constructor' che può essere usato per creare un nuovo vettore copia del vettore 'c' passato come argomento
Il terzo costruttore crea un vettore con num oggetti. Se l'argomento val viene specificato allora ai num oggetti inizialmente contenuti verrà assegnato quel valore. Esempio: il codice seguente crea un vettore che inizialmente consiste di 5 interi che contengono il numero 42:
vector<int> v1( 5, 42 );
L'ultimo costruttore crea un vettore che è inizializzato per contenere solo gli elementi di un altro vettore che sono contenuti nelle locazioni tra start e end. Per Esempio:
// create a vector of random integers cout << "original vector: "; vector<int> v; for( int i = 0; i < 10; ++i ) { int num = (int) rand() % 10; cout << num << " "; v.push_back( num ); } cout << endl; // find the first element of v that is even vector<int>::iterator iter1 = v.begin(); while( iter1 != v.end() && *iter1 % 2 != 0 ) { ++iter1; } // find the last element of v that is even vector<int>::iterator iter2 = v.end(); do { --iter2; } while( iter2 != v.begin() && *iter2 % 2 != 0 ); // only proceed if we find both numbers if( iter1 != v.end() && iter2 != v.begin() ) { cout << "first even number: " << *iter1 << ", last even number: " << *iter2 << endl; cout << "new vector: "; vector<int> v2( iter1, iter2 ); for( int i = 0; i < v2.size(); ++i ) { cout << v2[i] << " "; } cout << endl; }
Il codice genera un output di questo tipo (gli elementi del vettore iniziale sono generati dalla funzione rand(), quindi pseudo-casuali)
original vector: 1 9 7 9 2 7 2 1 9 8 first even number: 2, last even number: 8 new vector: 2 7 2 1 9
L'ultimo costruttore funziona come metodo conveniente per initializzare un vettore a partire da un array per qualche motivo già esistente. Esempio:
float fp_values[] = { 0.1, 0.2 , 0.3, 0.4}; // un array viene generato ... vector<float> fp_vector(fp_values,fp_values+4); // gli elementi dell'array vengono copiati nel nuovo fp_vector
Tenete in mente che i puntatori possono essere visti come forme elementari di iteratori.
Tutti questi costruttori girano in tempo lineare eccetto il primo che gira in tempo costante.
Quando il vettore viene distrutto allora il default destructor di ogni elemento viene invocato per ciascun elemento nel vettore.