Introduction à la librairie standard
La librairie standard STL
La librairie standard STL (Standard Template Library) du C++ fournit un ensemble de containers en exploitant très largement les mécanismes étendus du C++ par rapport au C
- l’approche objet et les capacités d’abstraction en particulier sur les opérateurs,
- la surdéfinition des opérateurs,
- les patrons ou templates.
La STL fournit par ailleurs des algorithmes (optimisés) permettant la manipulation aisée de ces nouveaux containers (initialisation, recherche de valeurs …)
La classe string
En C, une chaîne de caractère se présente sous la forme d’un tableau de caractères
char * name = new char[256];
La manipulation de ces pointeurs de caractères peut se faire par le biais de
fonctions définies dans string.h
(cstring
en C++)
Le C n’utilisant pas la surcharge d’opérateurs tels que +=
ou +
, la
manipulation est globalement complexe (sans parler de la désallocation de
mémoire).
La classe string
Utilisation de la classe string
en C++
#include <string> int main() { // Assignation/copie de strings std::string my_string1 = "abcd"; std::string my_string2 = my_string1; // Initialisation de strings std::string my_string3(my_string2); ...
La classe string
// Concaténation my_string2 += "abcd"; std::string my_string4 = my_string1 + "toto"; // Comparaison const bool are_equal = (my_string1 == my_string2); if (are_equal) { std::cout << my_string1 << " est identique à " << my_string2 << std::endl; } // Longueur d'une string size_t size = my_string1.size(); // Recherche dans une string size_t pos = my_string1.find("bc");
La classe vector
- La classe
vector
est proche par son utilisation du tableau défini en C, - L’avantage majeur de la classe
vector
tient en trois points :- l’utilisation de la notion de patron lui permet de manipuler n’importe quel type de données,
- sa capacité à réallouer automatiquement l’espace mémoire nécessaire via la
méthode
push_back
, - la désallocation de mémoire est automatique grâce à l’implémentation d’un destructeur.
La classe vector
#include <vector> #include <iostream> int main() { // Déclaration d'un vecteur d'entiers de taille non connue std::vector<int> my_vector1; // Ajout de trois elements my_vector1.push_back(4); my_vector1.push_back(2); my_vector1.push_back(5); // La méthode size précise le nombre d'entrée courante for (size_t i = 0; i < my_vector1.size(); ++i) std::cout << i << " " << my_vector1[i] << std::endl; }
La classe vector
// Création d'un vecteur d'entier contenant 70,70,70,70,70 std::vector<int> my_vector2(5, 70); // Réassignation des valeurs de ce vecteur my_vector2[0] = 5; my_vector2[1] = 3; my_vector2[2] = 7; my_vector2[3] = 4; my_vector2[4] = 8; // Nettoyage de l'espace mémoire my_vector2.clear();
La classe vector
// Création d'un vecteur de particule std::vector<particule> my_particles; // Création d'un ensemble de particule for (size_t i = 0; i < 10; ++i) { particule my_particle(0.511*i, -1.6e-19*i); my_particles.push_back(my_particle); // Affiche la dernière particule my_particles.back().affiche(); }