Kontenery to szablonowe klasy przystosowane do przechowywania zmiennych danego typu. Istnieją różne typy kontenerów, ja omówię jeden z najczęściej wykorzystywanych i najbardziej uniwersalny z nich czyli kontener typu vector. Kontener tego typu jest listą dwukierunkową umożliwiającą dostęp do wszystkich jej elementów oraz usuwanie i dodawanie elementu na dowolnej pozycji. Przykład kodu przechowującego zmienne typu int:
#include <iostream>
#include <vector> // biblioteka związana z klasą kontenera vector
int main(){
std::vector<int> tInt; // tutaj tworzę kontener typów liczbowych int
for(int i = 0; i < 10; i++){
tInt.push_back(i); // tutaj dodaję elementy na końcu listy
}
std::cout<<"Lista dodanych elementow do kontenera:"<<std::endl<<std::endl;
for(int i = 0; i < tInt.size(); // tutaj jest metoda zwracająca liczbę elementów zawartych w kontenerze
i++){
std::cout<<"tInt["<<i<<"]="<<tInt[i] // tak można odwoływać się do danego elementu kontenera
<<std::endl;
}
tInt.erase(tInt.begin() + 1); // tutaj usuwam 2-gi element listy tInt.begin() zwraca wskaźnik do pierwszego elementu listy a +1 przesówa wskaźnik o jedną pozycję
std::cout<<std::endl<<"Lista elementow po usunieciu 2-giego elementu:"<<std::endl<<std::endl;
for(int i = 0; i < tInt.size(); // tutaj jest metoda zwracająca liczbę elementów zawartych w kontenerze
i++){
std::cout<<"tInt["<<i<<"]="<<tInt[i] // tak można odwoływać się do danego elementu kontenera
<<std::endl;
}
tInt.insert(tInt.begin() + 4,10); // dodawanie elementu z wstawieniem go na 5-tej pozycji w kontenerze
std::cout<<std::endl<<"Lista elementow po dodaniu elementu na piatej pozycji w kontenerze:"<<std::endl<<std::endl;
for(int i = 0; i < tInt.size(); // tutaj jest metoda zwracająca liczbę elementów zawartych w kontenerze
i++){
std::cout<<"tInt["<<i<<"]="<<tInt[i] // tak można odwoływać się do danego elementu kontenera
<<std::endl;
}
tInt.erase(tInt.begin() + 1, tInt.begin() + 4); // usuwanie elementów od 2 do 4 z kontenera
std::cout<<std::endl<<"Lista elementow po usunieciu elementow od 2-giego do 4-tego:"<<std::endl<<std::endl;
for(int i = 0; i < tInt.size(); // tutaj jest metoda zwracająca liczbę elementów zawartych w kontenerze
i++){
std::cout<<"tInt["<<i<<"]="<<tInt[i] // tak można odwoływać się do danego elementu kontenera
<<std::endl;
}
tInt.clear(); // usuwanie wszystkich elementów kontenera
if(tInt.empty()){
std::cout<<std::endl<<"Tablica zostala oprozniona"<<std::endl<<std::endl;
}
cout<<"Wcisnij enter, aby zamknac program:";
cin.get();
return 0;
}
Oczywiście nic nie stoi na przeszkodzie, aby kontener przechowywał zmienne złożone takie jak struktury czy obiekty klasy danego typu. Istnieje też inny, szybszy sposób iterowania po elementach kontenera za pomocą iteratorów:
for(std::vector<int>::iterator i = tInt.begin();// od i = początkowemu wskaźnikowi tablicy
i < tInt.end(); // mniejszemu od wskaźnika końca tablicy
i++){
std::cout<<"tInt["<<int(i - tInt.begin()) // obliczanie numeru indeksu
<<"]="<<*i // odwołanie do wartości elementu kontenera z poziomu iteratora
<<std::endl; // wyświetlanie elementów tablicy
}
Klasa vector udostępnia szereg innych metod z nią związanych, poniżej zamieszczam niektóre z nich: