Si,sono dei container. Puoi mettere qualsiasi cosa .
Se dichiari un container di tipo base (int,char...) la sintassi e' quella.
Se inserisci nel container un tipo tuo creato ad hoc puoi fare cosi' :
codice:
struct ST { int id ; std::string nome; };

typedef std::vector<ST> Vs;
Vs vs1;
vs1[i].id = 1;
vs1[i].nome = "uaz";
ti consiglio di usare anche l'iteratore per scorrere il container :
Vs::iterator it;
Per esempio in un ciclo for :
codice:
 
for(it = vs1.begin() ; it!=vs1.end() ; it++)
{
 std::cout<<"id"<<(it*).id<<std::endl;
 std::cout<<"Nome<<(it*).nome<<std::endl;
}
Come vedi sono molto pratici.
Pero' fai attenzione alla condizione di uscita dal for!.
Se vuoi inserire una condizione > o < , devi ridefinire un metodo del container per fargli capire cosa vuol dire < o > per il tuo tipo ad hoc.