Compilation & Directives de préprocesseur Pointeurs, Références & Allocation Dynamique de Mémoire Spécificités du C++ (indépendantes de la POO) Structures & Classes Encapsulation des données Constructeur & Destructeur de classe Copie d'objets Amitié & Surcharge d'opérateur Héritage (Partie 1) Héritage (Partie 2) Patrons de fonctions et de classes Introduction à la librairie standard
Retour menu principal

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 :
    1. l’utilisation de la notion de patron lui permet de manipuler n’importe quel type de données,
    2. sa capacité à réallouer automatiquement l’espace mémoire nécessaire via la méthode push_back,
    3. 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();
}