STL
Transcription
STL
Programmation en C++ Standard Library ● ● Chaînes (Strings) Conteneurs 1 Organisation ● Le bibliothèque standard SL est organisée en plusieurs parties. – STL (Standard Template Library): ● Conteneurs ● Itérateurs ● Algorithmes – Chaînes de caractères (Strings) – Flots (Streams) ● Déjà expliqué dans la présentation précédente – Numériques – Internationalisation ● Ne seront pas expliquées dans ce cours 2 Strings ● ● ● Les classes de String nous permettent d'utiliser les chaînes de caractères comme les types normaux qui ne causent pas de problèmes pour l'utilisateur – Différent des "string ordinaires" de type char * ou const char * – Copie, l'affectation et les fonctions de comparaison, comme pour les types fondamentaux, sont déjà disponibles - sans se soucier de corruption de la mémoire Défini dans l'« header » <string> Type: std::string - la chaîne de caractères de type char 3 Opérations avec String Affectation ('assignment, operator ='): ● std::string s = "abcd"; std::string t = s; t += “efgh”; ● Taille de string ('size') : std::string s = "abcd"; int size = s.size(); ● Recherche dans une chaîne ('find'): std::string s = "abcd"; int pos = s.find("bc"); ● Conversion en C-string (char *): std::string s = "abcd"; char* cs = s.c_str(); 4 STL STL = Standard Template Library ● Le cœur de SL ● Fournit une variété de classes de conteneur que répond à des besoins différents, avec plusieurs algorithmes qui fonctionnent sur eux – Les programmeurs peuvent oublier la programmation des tableaux dynamiques, des algorithmes de recherche etc – Il suffit de choisir le conteneur approprié et d'appeler ses méthodes pour le traitement des données ● Tous les composants sont des patrons ('templates') – Peuvent être utilisés avec des types arbitraires ● Extrêmement efficace ● La coopération des différentes composantes est bien-structurée : – Les conteneurs, itérateurs et algorithmes 5 Conteneurs ● ● ● Gérent une collection d'éléments Ordonnés ('Sequence') = collections ordonnées dans lesquelles chaque élément a une certaine position (indépendante de la valeur) – Vecteur ('vector') : 1 dimensional array – Liste ('list'): liste doublement chainée Associative = collections triés (la position réelle d'un élément dépend de sa valeur) – – Set / Multiset: ● Élément classés en fonction de leur propre valeur Map / Multimap: ● Les éléments sont paires clé / valeur, classés en fonction de valeur de la clé 6 Vector ● ● ● Dans le 'header' <vector> Type: std::vector<T> - où T est le type d'élément Des fonctions utiles: #include <iostream> – push_back(elem) #include <vector> Ajouter un élément à la fin int main () { – at(idx) ou [idx] std::vector<int> myVector; ● Retour de idx-ème élément myVector.push_back(3); – front(), back() myVector.push_back(4); ● Retour de le premier, le dernier élément std::cout << myVector[0] << std::endl; ● – size() ● – myVector.at(1) = 5; std::cout << myVector.back() << std::endl; Retour de la taille de vecteur clear() ● Supprimer tous les éléments myVector.clear(); return 0; } 7 List ● ● ● Dans le 'header' <list> Type: std::list<T> - où T est le type d'élément Des fonctions utiles: – push_front(elem), push_back(elem) ● – myList.push_front(3); myList.push_front(2); myList.push_back(4); Ajouter un élément au début, à la fin myList.pop_front(); myList.pop_back(); pop_front(), pop_back() ● – #include <iostream> #include <list> int main () { std::list<int> myList; Enlever l'élément au début, à la fin std::cout << myList.front() << std::endl; std::cout << myList.back() << std::endl; front(), back(), size(), clear() ● Même comme pour vector } ● return 0; Certaines méthodes sont communes à la fois au vecteur et a la liste (et aussi aux autres conteneurs): size (), clear (), ... 8 Itérateurs ● ● Itérateur ('iterator') = objet qui peut "parcourir" (naviguer parmi) les éléments Il représente une certaine position dans un conteneur v.end() v.begin() vector T T T T T T T it ● ● Tous les conteneurs fournissent les mêmes fonctions de base qui permettent aux itérateurs de naviguer parmi leurs éléments Les fonctions définies pour tous les conteneurs: – begin(), end() ● Retour d'un itérateur, qui représente le commencement, la fin des éléments dans le conteneur. ● La fin est la position derrière le dernier élément 9 Itérateurs ● ● ● L'« header »: – Tous les conteneurs définissent leur propre type d'itérateur, il n'y a pas d '« header » spécial pour l'utilisation des itérateurs Types: – container_type::iterator – container_type::const_iterator Opérations de base: – Operator * ● – Operator ++ ● – Permet à l'itérateur de passer à un autre élément Operators == and != ● – Renvoie l'élément de la position actuelle Renvoie le résultat si deux itérateurs représentent la même position ou non Operator = ● Attribuer un itérateur (la position de l'élément auquel il se réfère) 10 Itérateurs - Exemple #include <iostream> #include <vector> int main() { std::vector<int> myVector; // ... fill the vector here // Iterating over vector elements std::vector<int>::iterator it; for ( it = myVector.begin(); it != myVector.end(); ++it ) { int i = *it; std::cout << "i = " << i << std::endl; } return 0; } 11 Quand utiliser le quel conteneur ● ● ● Vector – Par défaut, vous devez utiliser un vecteur – Si vous avez besoin d'accéder au N-ème élément – L'insertion et le retrait peuvent être coûteux – Très efficace lorsque vous naviguez sur le conteneur List – Si vous avez souvent besoin d'insérer ou de retirer un élément en plein milieu du conteneur – L'insertion a lieu à temps constant – L'accès au N-ème élément par itération à partir du 1er Map – Si vous avez besoin d'un élément via une clé – Une liste triée maintenue lors de l'insertion de nouveaux éléments – Liste associative 12
Documents pareils
class - DCanL
Opérations standard sur un std::set
Le Traitement des données avec la STL (pdf - David Saint
pointeurs ‘Précédent ‘ ‘Suivant’. Pour un nombre
d’objets identiques une liste prend souvent plus de
place en mémoire.
Tous les conteneurs disposent de 3 fonctions :
• begin() renvoie l’itérateur s...