STL - partea II
Funcții comune tuturor containerelor STL
-
empty
Returneazăbool empty() const noexcept;falsedacă setul are elemente șitruedacă nu are.Exemplu
- ### sizestd::set<int> data = { 1, 4, 5, 6 }; std::cout << data.empty(); // Se afișează: falseReturnează numărul de elemente dintr-un set.size_type size() const noexcept;Exemplu
std::map<int, char> data {{1, 'a'}, {3, 'b'}, {5, 'c'}, {7, 'd'}}; std::cout << data.size(); // Se afișează: 4Funcții comune pentru vector, set, map și deque
-
clear
Șterge toate elementele din container.void clear() noexcept;
Exemplu
- ### insertstd::set<int> data = { 1, 4, 5, 6 }; data.clear(); std::cout << data.size(); // Se afișează: 0Insereazăstd::pair<iterator, bool> insert( const value_type& value );valueîn container.Exemplu
Pentru mai multe, a se consulta documentația vector | set | map | deque. - ### erasestd::set<int> data = { 1, 4, 5, 6 }; data.insert(10); std::cout << data.size(); // Se afișează: 51. Șterge elemetul de la poziția1. iterator erase( const_iterator pos ); 2. iterator erase( const_iterator first, const_iterator last );pos. 2. Șterge elementele dintre pozițiilefirstșilast.Exemplu
std::set<int> data = { 1, 4, 5, 6 }; auto bg = data.begin(); auto ed = data.end(); data.erase(bg, ed); std::cout << data.size(); // Se afișează: 0 -
<set>
Setul este un container STL asociativ, care conține sortate obiecte de tipul Key. Acestea sunt sortate cu ajutorul unei funcții de comparare, în funcție de Key. Căutarea, eliminarea și inserarea elementelor se realizează în complexitate logaritmică.
-
count
Returnează numărul de elemente cu cheia key. Aceasta este fie 0 fie 1, deoarece seturile nu permit duplicate.size_type count( const Key& key ) const;Exemplu
- ### findstd::set<int> data = { 1, 4, 5, 6, 1 }; std::cout << data.count(1) << ' '; std::cout << data.count(3); // Se afișează: 1 0Găsește un element cu cheiaiterator find( const Key& key ); const_iterator find( const Key& key ) const;keyechivalentă cheii din set și returnează un pointer. Dacă nu găsește, este returnat iteratorulend().Exemplu
- ### containsstd::set<int> data = { 1, 4, 5, 6, 1 }; if (data.find(5) != data.end()) { std::cout << "found"; } // Se afișează: foundVerifică dacă există un element cu cheiabool contains( const Key& key ) const;keyîn set.Exemplu
std::set<int> data = { 1, 4, 5, 6, 1 }; if (data.contains(5)) { std::cout << "found"; } // Se afișează: found
<map>
Mapul este un container STL asociativ, care conține sortate obiecte pereche care conțin o cheie și o valoare. Acestea sunt sortate cu ajutorul unei funcții de comparare, în funcție de Key. Căutarea, eliminarea și inserarea elementelor se realizează în complexitate logaritmică. Acestea sunt un fel de dicționare, permitând accesul rapid la date.
-
at
Returnează o referință la elementul din map cu cheiaT& at( const Key& key ); const T& at( const Key& key ) const;key. Dacă nu există, aruncă o excepție.Exemplu
- ### operator []std::map<int, char> data = {{1, 'a'}, {3, 'b'}, {5, 'c'}, {7, 'd'}}; std::cout << data.at(1); // Se afișează: aReturnează o referință la elementul din map cu cheiaT& operator[]( const Key& key );key. Dacă nu există, inserează cheia respectivă (Din această cauză nu se recomandă folosirea lui).Exemplu
- ### countstd::map<int, char> data = {{1, 'a'}, {3, 'b'}, {5, 'c'}, {7, 'd'}}; std::cout << data[1]; // Se afișează: aReturnează numărul de elemente cu cheia key. Aceasta este fie 0 fie 1, deoarece mapurile nu permit duplicate.size_type count( const Key& key ) const;Exemplu
- ### findstd::map<int, char> data = {{1, 'a'}, {3, 'b'}, {5, 'c'}, {7, 'd'}}; std::cout << data.count(1) << ' '; std::cout << data.count(4); // Se afișează: 1 0Găsește un element cu cheiaiterator find( const Key& key ); const_iterator find( const Key& key ) const;keyechivalentă cheii din map și returnează un iterator. Dacă nu găsește, este returnat iteratorulend().Exemplu
- ### containsstd::map<int, char> data = {{1, 'a'}, {3, 'b'}, {5, 'c'}, {7, 'd'}}; if (data.find(5) != data.end()) { std::cout << "found"; } // Se afișează: foundVerifică dacă există un element cu cheiabool contains( const Key& key ) const;keyîn map.Exemplu
std::map<int, char> data = {{1, 'a'}, {3, 'b'}, {5, 'c'}, {7, 'd'}}; if (data.contains(5)) { std::cout << "found"; } // Se afișează: found
Update prin referință
O modalitate comodă de a actualiza elementele din map este prin referință, deoarece nu trebuie să le mai căutăm de fiecare data în map. Exemplu
std::map<int, char> data = {{1, 'a'}, {3, 'b'}, {5, 'c'}, {7, 'd'}};
char& obj = data.at(1);
obj = 'b';
std::cout << data.at(1);
// Se afișează: b
<stack>
Stackul este un container STL care se oferă funcționalitatea unei stive, după principiul ultimul intrat, primul ieșit. - ### top
const_reference top() const;
**Exemplu**
```cpp
std::stack<int> s;
s.push(2);
s.push(4);
std::cout << s.top();
// Se afișează: 4
```
-
push
cpp void push( const value_type& value );Adaugă elementulvalueîn stivă.Exemplu
- ### popstd::stack<int> s; s.push(2); std::cout << s.top(); // Se afișează: 2Elimină elementul din vârful stivei.void pop();Exemplu
std::stack<int> s; s.push(2); s.push(4); s. pop(); std::cout << s.top(); // Se afișează: 2
<queue>
Queueul este un container STL care se oferă funcționalitatea unei cozi, după principiul primul intrat, primul ieșit. - ### front
reference front();
const_reference front() const;
**Exemplu**
```cpp
std::queue<int> q;
q.push(2);
q.push(4);
std::cout << q.front();
// Se afișează: 2
```
-
back
cpp reference back(); const_reference back() const;Returnează ultima valoare din coadă.Exemplu
- ### pushstd::queue<int> q; q.push(2); q.push(4); std::cout << q.back(); // Se afișează: 4Adaugă elementulvoid push( const value_type& value );valueîn coadă.Exemplu
- ### popstd::queue<int> q; q.push(2); std::cout << q.front(); // Se afișează: 2Elimină primul element al cozii.void pop();Exemplu
std::queue<int> q; q.push(2); q.push(4); q.pop(); std::cout << q.front(); // Se afișează: 2
<deque>
Dequeul este un container STL care permite inserția și eliminarea elementelor la ambele capete ale sale. Din această cauză, dequeul este scalabil, dar nu foarte eficient, acesta fiind evitat în programarea competitivă, folosindu-se alte modalități, cum ar fi 2 stive. - ### at
reference at( size_type pos );
const_reference at( size_type pos ) const;
pos. Dacă nu există, aruncă o excepție.
**Exemplu**
```cpp
std::deque<int> data = { 1, 2, 4, 5, 5, 6 };
std::cout << data.at(1);
// Se afișează: 2
```
-
operator []
cpp reference operator[]( size_type pos ); const_reference operator[]( size_type pos ) const;Returnează o referință la elementul din deque aflat la pozițiapos, fără a verifica dacă există. Exemplucpp std::deque<int> data = { 1, 2, 4, 5, 5, 6 }; std::cout << data[1]; // Se afișează: 2 -
front
cpp reference front(); const_reference front() const;Returnează primul element din deque.Exemplu
- ### backstd::deque<int> data = { 1, 2, 4, 5, 5, 6 }; std::cout << data.front(); // Se afișează: 1Returnează ultimul element din deque.reference back(); const_reference back() const;Exemplu
- ### push_backstd::deque<int> data = { 1, 2, 4, 5, 5, 6 }; std::cout << data.back(); // Se afișează: 6Adaugăvoid push_back( const T& value ); void push_back( T&& value );valuela finalul dequeului.Exemplu
- ### pop_backstd::deque<int> data = { 1, 2, 4, 5, 5, 6 }; data.push_back(7); std::cout << data[6]; // Se afișează: 7Elimină ultimul element al dequeului.void pop_back();Exemplu
- ### push_frontstd::deque<int> data = { 1, 2, 4, 5, 5, 6 }; data.pop_back(); std::cout << data.size[4]; // Se afișează: 5Adaugăvoid push_front( const T& value ); void push_front( T&& value );valuela începutul dequeului.Exemplu
- ### pop_frontstd::deque<int> data = { 1, 2, 4, 5, 5, 6 }; data.push_front(7); std::cout << data[0]; // Se afișează: 7Elimină primul element al dequeului.void pop_front();Exemplu
std::deque<int> data = { 1, 2, 4, 5, 5, 6 }; data.pop_front(); std::cout << data[0]; // Se afișează: 2