This shows you the differences between two versions of the page.
|
poo-is-ab:laboratoare:11 [2025/12/08 19:04] razvan.cristea0106 [Clasa string] |
poo-is-ab:laboratoare:11 [2025/12/08 19:14] (current) razvan.cristea0106 [Funcții lambda și algoritmi] |
||
|---|---|---|---|
| Line 61: | Line 61: | ||
| Așa cum am menționat mai sus clasa **string** este o clasă specială în C++ pentru lucrul cu **șiruri de caractere**. Această clasă a fost introdusă pentru a simplifca masiv lucrul cu datele de tip **''char*''**. Un **string** își actualizează dimensiunea dinamic în funcție de ce operații suferă iar la final, când durata de viață a acestuia se încheie, este chemat automat destructorul care dezalocă memoria ocupată de acesta. | Așa cum am menționat mai sus clasa **string** este o clasă specială în C++ pentru lucrul cu **șiruri de caractere**. Această clasă a fost introdusă pentru a simplifca masiv lucrul cu datele de tip **''char*''**. Un **string** își actualizează dimensiunea dinamic în funcție de ce operații suferă iar la final, când durata de viață a acestuia se încheie, este chemat automat destructorul care dezalocă memoria ocupată de acesta. | ||
| - | În continuare vom prezenta un tabel unde sunt descrise principalele metode și operatori care există în clasa **string**. | + | În continuare vom prezenta un tabel unde sunt descrise principalele metode și operatori din clasa **string**. |
| ^ Denumire metodă / Operator ^ Descriere ^ | ^ Denumire metodă / Operator ^ Descriere ^ | ||
| Line 139: | Line 139: | ||
| <note warning>Dacă vom citi un **string** cu **operatorul %%>>%%** trebuie menționat faptul că acesta va fi citit până la apariția primului **spațiu**, similar cu ceea ce se întâmpla în cazul **șirurilor de caractere** din limbajul **C** atunci când erau citite cu funcția **scanf**.</note> | <note warning>Dacă vom citi un **string** cu **operatorul %%>>%%** trebuie menționat faptul că acesta va fi citit până la apariția primului **spațiu**, similar cu ceea ce se întâmpla în cazul **șirurilor de caractere** din limbajul **C** atunci când erau citite cu funcția **scanf**.</note> | ||
| - | <note tip>Pentru a citi de la tastatură sau din fișier un **string** până la apariția caracterului **''\n''** ne putem folosi de funcția **getline**. | + | <note tip>Pentru a citi de la tastatură sau din fișier un **string** până la apariția caracterului **'\n'** ne putem folosi de funcția **getline**. |
| </note> | </note> | ||
| Line 251: | Line 251: | ||
| ==== Clasa vector ==== | ==== Clasa vector ==== | ||
| - | Pentru clasa **vector** propunem următorul tabel ca și referință: | + | Pentru clasa **vector** propunem următorul tabel ca și referință. |
| ^ Denumire metodă/Operator ^ Descriere ^ | ^ Denumire metodă/Operator ^ Descriere ^ | ||
| Line 789: | Line 789: | ||
| </code> | </code> | ||
| - | <note tip>Pentru a putea modifica **valorile copiilo**r în interiorul **expresiei lambda** trebuie să o marcăm ca fiind **mutabilă**. În acest sens trebuie să utilizăm cuvântul cheie ''**mutable**'' care ne dă posibilitatea să **modificăm variabilele capturate prin valoare** în interiorul unei **funcții anonime**, însă modificările **nu** afectează **variabilele originale** din exterior, deoarece **funcția lambda** lucrează cu **copii** ale acestora.</note> | + | <note tip>Pentru a putea modifica **valorile copiilo**r în interiorul **expresiei lambda** trebuie să o marcăm ca fiind **mutabilă**. În acest sens trebuie să utilizăm cuvântul cheie **mutable** care ne dă posibilitatea să **modificăm variabilele capturate prin valoare** în interiorul unei **funcții anonime**, însă modificările **nu** afectează **variabilele originale** din exterior, deoarece **funcția lambda** lucrează cu **copii** ale acestora.</note> |
| Așadar vom rescrie exemplul de mai sus în care vom avea posibilitatea de această dată să modificăm valoarea copiei lui ''**a**'' în interiorul funcției lambda. | Așadar vom rescrie exemplul de mai sus în care vom avea posibilitatea de această dată să modificăm valoarea copiei lui ''**a**'' în interiorul funcției lambda. | ||
| Line 914: | Line 914: | ||
| </code> | </code> | ||
| - | Dacă am dori să avem un vector sortat descrescător acest lucru ar fi echivalent cu a construi un criteriu custom de sortare pentru a putea face funcția de sortare să înțeleagă faptul că ne dorim să vedem elementele ordonate de la cel mai mare la cel mai mic. Avem două variante prin care putem să facem acest lucru și anume: folosind o funcție care joacă rol de comparator și în care scriem criteriul de sortare sau folosind o expresie lambda in care punem logica de sortare. | + | Dacă am dori să avem un vector sortat descrescător acest lucru ar fi echivalent cu a construi un criteriu custom de sortare pentru a putea face funcția de sortare să înțeleagă faptul că ne dorim să vedem elementele ordonate de la cel mai mare la cel mai mic. Avem două variante prin care putem să facem acest lucru și anume: folosind o funcție care joacă rol de comparator și în care scriem criteriul de sortare sau folosind o expresie lambda în care punem logica de sortare. |
| Pentru a sorta descrescător vectorul folosind un comparator putem proceda în felul următor. | Pentru a sorta descrescător vectorul folosind un comparator putem proceda în felul următor. | ||