La Biblioteca de Plantilles Estàndard (STL) és una col·lecció de classes i funcions de C++ que proporciona estructures de dades i algorismes genèrics. La STL és una part fonamental de la programació en C++ i permet als programadors escriure codi més eficient i reutilitzable.
Conceptes Clau de la STL
- Contenidors
Els contenidors són classes de la STL que emmagatzemen col·leccions d'objectes. Els principals tipus de contenidors són:
- Seqüencials: emmagatzemen elements en una seqüència específica.
vector
deque
list
array
- Associatius: emmagatzemen elements en una estructura que permet la cerca ràpida.
set
map
multiset
multimap
- Contenidors basats en hash: utilitzen una funció de hash per emmagatzemar elements.
unordered_set
unordered_map
unordered_multiset
unordered_multimap
- Iteradors
Els iteradors són objectes que permeten recórrer els elements d'un contenidor. Són similars als punters i proporcionen una interfície comuna per accedir als elements dels contenidors.
- Algorismes
La STL proporciona una sèrie d'algorismes genèrics que es poden aplicar als contenidors. Alguns exemples inclouen:
sort
find
copy
accumulate
- Funcions i Funcions Lambda
Les funcions i les expressions lambda es poden utilitzar amb els algorismes de la STL per proporcionar funcionalitat personalitzada.
Exemples Pràctics
Exemple 1: Utilització de vector
#include <iostream> #include <vector> #include <algorithm> int main() { std::vector<int> numbers = {1, 2, 3, 4, 5}; // Afegir elements numbers.push_back(6); numbers.push_back(7); // Iterar i imprimir elements for (int num : numbers) { std::cout << num << " "; } std::cout << std::endl; // Ordenar elements std::sort(numbers.begin(), numbers.end(), std::greater<int>()); // Imprimir elements ordenats for (int num : numbers) { std::cout << num << " "; } std::cout << std::endl; return 0; }
Exemple 2: Utilització de map
#include <iostream> #include <map> int main() { std::map<std::string, int> ageMap; // Afegir elements ageMap["Alice"] = 30; ageMap["Bob"] = 25; ageMap["Charlie"] = 35; // Iterar i imprimir elements for (const auto& pair : ageMap) { std::cout << pair.first << ": " << pair.second << std::endl; } // Cercar un element auto it = ageMap.find("Bob"); if (it != ageMap.end()) { std::cout << "L'edat de Bob és " << it->second << std::endl; } else { std::cout << "Bob no es troba al mapa." << std::endl; } return 0; }
Exercicis Pràctics
Exercici 1: Utilització de set
Descripció: Crea un programa que utilitzi un set
per emmagatzemar una col·lecció de números enters únics. Afegeix alguns números, elimina un número i imprimeix tots els números del set
.
Solució:
#include <iostream> #include <set> int main() { std::set<int> numberSet; // Afegir elements numberSet.insert(10); numberSet.insert(20); numberSet.insert(30); numberSet.insert(40); // Eliminar un element numberSet.erase(20); // Iterar i imprimir elements for (int num : numberSet) { std::cout << num << " "; } std::cout << std::endl; return 0; }
Exercici 2: Utilització de unordered_map
Descripció: Crea un programa que utilitzi un unordered_map
per emmagatzemar una col·lecció de parelles clau-valor on la clau és un nom i el valor és una edat. Afegeix alguns elements, actualitza l'edat d'un element i imprimeix tots els elements del unordered_map
.
Solució:
#include <iostream> #include <unordered_map> int main() { std::unordered_map<std::string, int> ageMap; // Afegir elements ageMap["Alice"] = 30; ageMap["Bob"] = 25; ageMap["Charlie"] = 35; // Actualitzar l'edat de Bob ageMap["Bob"] = 26; // Iterar i imprimir elements for (const auto& pair : ageMap) { std::cout << pair.first << ": " << pair.second << std::endl; } return 0; }
Resum
En aquesta secció, hem après sobre la Biblioteca de Plantilles Estàndard (STL) de C++, incloent-hi els contenidors, els iteradors, els algorismes i les funcions lambda. Hem vist exemples pràctics d'utilització de vector
i map
, i hem realitzat exercicis pràctics amb set
i unordered_map
. La STL és una eina poderosa que permet als programadors escriure codi més eficient i reutilitzable. En el proper mòdul, explorarem les expressions lambda en més detall.
Curs de Programació en C++
Mòdul 1: Introducció al C++
- Introducció al C++
- Configuració de l'Entorn de Desenvolupament
- Sintaxi i Estructura Bàsica
- Variables i Tipus de Dades
- Entrada i Sortida
Mòdul 2: Estructures de Control
Mòdul 3: Funcions
- Introducció a les Funcions
- Paràmetres de Funció i Tipus de Retorn
- Sobrecàrrega de Funcions
- Recursivitat
Mòdul 4: Arrays i Strings
Mòdul 5: Punteres i Referències
- Introducció als Punteres
- Aritmètica de Punteres
- Punteres i Arrays
- Referències
- Assignació Dinàmica de Memòria
Mòdul 6: Programació Orientada a Objectes
- Introducció a la POO
- Classes i Objectes
- Constructors i Destructors
- Herència
- Polimorfisme
- Encapsulació i Abstracció
Mòdul 7: Temes Avançats
- Plantilles
- Gestió d'Excepcions
- Entrada/Sortida de Fitxers
- Biblioteca de Plantilles Estàndard (STL)
- Expressions Lambda
- Multifil