Zmienne
Zmienne liczbowe
short a;
całkowite do 32kint a;
całkowite do 2 mldlong long a;
całkowite mega dużeunsigned short a;
tylko dodatnie całkowite, ale 2 razy większy zakresfloat a;
rzeczywiste, do 6 cyfr po przecinkudouble a;
rzeczywiste do 15 cyfr po przecinku
Zmienne tekstowe
char a = 'b';
pojedyńcze znakistring tekst = "Ala ma kota";
tekst (tablica znaków)
warto zwrócić uwagę na to, że znaki i tekst mają inne cudzysłowy
Działania na stringu
tekst.size()
ilość znaków w stringutekst.substr(2);
kopiuje tekst od 2 pozycji do końcatekst.substr(2,4);
kopiuje tekst od 2 do 4 pozycjitekst.find("ala");
zwraca numer pozycji na której znajduje się szukany teksttekst.find("ala",3);
zwraca numer pozycji na której znajduje się szukany tekst, zaczynając od 3 pozycjitekst.rfind("a",6);
zwraca numer pozycji, ale szuka od tyłu, w tym przypadku idzie 6->0
UWAGA! find zawsze zwróci jakiś wynik, ale jeśli nie ma tego znaku w stringu to będzie to liczba większa niż rozmiar stringa
Tablice
int tablica[4]={1,2,3,4};
Tablica statyczna, nie można zmieniać rozmiaruvector<int>V(12,0);
Tablica dynamiczna V o długości 12, wypełniona 0 (zarowno dlugosc jak i wypelnienie jest opcjonalne)tablica[2]
odwołuje się do 3 komórki (numerowanie od 0)
Działania na vektorach
załóżmy, że mamy zmienną V typu vektor
V.size();
zwraca ilość komórekV.push_back(2);
dodaje na koniec vektora komórkę o wartości 2V.pop_back();
usuwa ostatnią komórkęV.clear();
usuwa wszystkie komórkiV.empty();
zwraca true jeśli tablica jest pustaV.insert(V.begin() + 2, 9);
wstawia komórkę o zawartości 9 na 2 pozycję w tablicyV.erase(V.begin() + 8);
usuwa komórkę na 8 pozycjiV.erase(V.begin()+2, V.begin()+5);
usuwa komórki od 2 do 5 włącznie
Tablice wielowymiarowe
tworzymy poprostu vektor wypełniony vektorami
vector< vector<int> > V (wiersze, vector<int>(kolumny));
odwołanie wtedy wygląda tak V[2][5]
Mapy
mapy są potężnym narzędziem pozwalającym na tworzenie tablic, których indexem nie musi być int, lub tworzenie komórek o indexie np 5 bez istnienia komórek 0-4
map<int,int>M;
tworzymy mapę M o indexach typu int i wartościach typu intmap<int,int>::iterator it;
tworzymy iterator it, który pozwoli na przemieszczanie się po kolejnych komórkachM.size();
M.empty();
M.clear();
M[-1]=18;
wpisywanie wartości (zwróć uwagę, że index może być tu ujemny)M[124]++;
zwiększamy wartość wcześniej nie używanej komórki o 1, więc teraz jest 1 (domyślnie miała 0)M.count(21);
sprawdzamy czy komórka istnieje
Iterator
Iterator to wskaźnik, za pomocą którego jesteśmy w stanie iść element po elemencie przez zmienne wielowymiarowe. W przypadku typu zmiennych takich jak Mapy, gdzie kolejne komórki nie są numerowane po kolei jest on niezbędny.
map<int,int>::iterator it;
for(it=M.begin();it!=M.end();it++)
cout<<it->first<<"\t:\t"<<M[it->first]<<"\t:\t"<<it->second<<endl;
it->first
to jest numer komórkiit->second
to wartość komórki, czyli to samo coM[it->first]
warto zwrócić uwagę na warunki pętli. iterator idzie od poczatkuM.begin()
, a konczy gdy dochodzi do końcaM.end()
Reverse iterator
Tak, istnieje coś takiego jak reverse iterator. Jest to iterator, tyle że idzie od tyłu (obv)
map<int,int>::reverse_iterator rit;
for(rit=M.rbegin();rit!=M.rend();rit++)
cout<<rit->first<<"\t:\t"<<rit->second<<endl;
Ważne do zauważenia jest to, że zamiast M.begin()
używamy M.rbegin()
, czyli reverse begin, a nie end! To są wskaźniki i nie można ich tak łatwo poprostu podmienić! Analogicznie z M.rend()
Kolejki i stosy
Kolejka i stos charakteryzują się tym, że nie mamy dostępu do wszystkich elementów w jednym momencie, lecz "wzamian" mogą one zmieniać swoją długość bardzo szybko w przeciwieństwie do np Vektora. Dodatkowo kolejka priorytetowa ma jedno z najszybszych możliwych sortowań w c++.
Kolejka | Kolejka priorytetowa | Stos | |
---|---|---|---|
Rodzaj | FIFO | FIFO (z sortowaniem rosnącym) | FILO |
Definiowanie | queue<int>K; |
priority_queue<int>KP; |
stack<int>S; |
Dokładanie elementu | K.push(x) |
KP.push(x) |
S.push(x) |
Zdejmowanie elementu | K.pop() |
KP.pop() |
S.pop() |
Odczytywanie elementu | K.front() lub K.back() |
KP.top() lub KP.bottom() |
S.top() |
Rozmiar | K.size() |
KP.size() |
S.size() |
- FIFO = First in First Out
- FILO = First in Last Out