Standard template library(stl)

Introduction

A l'image du langage C, le langage C++ exploite une librarie provenant essentiellement d'Unix ,système d'exploitation fondé sur sur le C.
Les concepteurs de C++ ont ajouté une autre bibliothèque pour utiliser les nouvelles possibilités d'abstraction du langage.
La bibliothèque STL contient de nombreux modèles de fonctions et de classes qui ne peuvent être implémentées de maniere optimale dans le langage lui-même.
Elle fournit des utlitaires pour bâtir d'autres bibliothèques.
Vous devriez en apprendre plus dans ce tutoriel.
Wina , La Vista...

Organisation générale

Les fonctions de la bibliothèque standard sont définies dans l'espace de nom std(ou s).
Elles sont présentées sous la forme d'un ensemble d'en-têtes, à l'image de la bibliothèque du langage C.

Theme Principales en-têtes
Conteneurs vector, list, deque,queue,stack, map, set, multiset
Utilitaires généraux utility, functional, memory, ctime
Opérateurs d'itérations iterator
Algorithmes algorithm, cstdlib
Diagnostics exception, stdexcept, cassert, cerrno
Chaines string, cctype, cwtype, cstring, cwchar, cstdlib
Entrees/Sorties iosfwd, iostream, ios, streambuf, istream, ostream,
iomanip, sstream, cstdlib, fstream, cstdio, cwchar
Localisation locale, clocale
Support du langage limits, climits, cfloat, new, typeinfo, exception,
cstddef, stdarg, csetjmp, cstdlib, ctime, csignal
Caractères numériques complex, valarray, numeric, cmath, cstdlib

Vous pouvez avoir la doc sur STL via google.

Bonne pioche...

Conteneurs

Les conteneurs sont des objets prévus pour rassembler d'autres objets. L'homogénéité des objets contenus et leur mode d'accès (indexe, noms, indéterminé) déterminent différents types de conteneurs.
La STL connait les vecteurs (tableaux a une dimension), les listes doublement chainées,les files d'attentes à simple et double accès, les piles, les tableaux associatifs, les ensembles et les tableaux de booléens.

Exemple de STL::conteneurs

#include <windows.h>
#include 
#include <vector.h>

LONG lFin = 0

using namespace std; // utilise la bibliothèque STL standard du C++ pure

void main()
{
// Un vecteur compose de 3 chaines de caractères
vectorvector<char*>vect(3);
// Charger le vecteur
at(0)="debut\n";
at(0)="Afficher\n";
at(0)="Fin\n";
// afficher le vecteur
for(int i=0; i<vect.size();i++)
cout<<vect.at(i)<<endl;

return lFin;
}

Les chaînes

Une chaîne est une suite ordonnée de caractères , et la bibliothèque STL fournit une classe pour rassembler toutes les opérations habituelles concernant les chaines.
L'implémentation des chaines prévues par le langage C donne une part trop belle aux pointeurs.
Au delà des fonctions de base (longueur,comparaison), d'autres opérations plus complexes (recherche, remplacement, mise en mémoire indexée (buffer) tampon) sont mieux supportées par la STL.
Par ailleurs, implémentation sous la forme d'une classe aux opérateurs surcharges rend les notations beaucoup plus lisibles et beaucoup plus claires

Exemple :

#include <windows.h>
#include 
#include <string>

using namespace std;

LONG lFin=0x0000;

void main()
{
string s1="Windows Vista" s2="Linux Debian";

// comparer les deux chaines
if(s1 !=s2)
cout <<"l'operateur != est plus simple que strcmp !"<<endl;

// concatener 
string s3=s1+""+s2;
cout<<s3.c_str()<<endl;

// rechercher 
cout<<"trouver " <<s2.c_str()<<" dans "<<s1.c_str()<<" : ";
string::size_type t=s1.find(s2);
cout<<t<<endl;

// remplacer du texte
replace(0,3,"lpstrGeek");

cout<<s1.c_str()<<endl;

// itérer 
for(int i=0; i<s1.length();i++)
cout<<s1[i * <<" ";
return lFin;
}

Intéressons nous maintenant au mécanisme d'entrées et de sorties, utilisés notamment pour des opérations sur fichier dans une interface utilisateur.

Entrées/Sorties

Bien qu'il soit tout a fait envisageable d'utiliser les fonctions C de <stdio.h>
Pour:
- Ouvrir : fopen,
- Lire : fread,
- Ecrire : fwrite,
- Fermer : fclose
des fichiers, la STL met à la disposition du développeur un tout nouveau dispositif objet.
Il s'agit des flux (streams) et nous connaissons déjà cin et cout.
Ces flux sont basés sur la classe ios, à partir de laquelle sont dérivées des classes générales comme istream et ostream , des classes d'accès aux fichiers fstream et des classes de flux mémoire strstreambase.
Pour les accès de bas niveau(low level access LLA), il y a la classe streambuf qui se dérive en filebuf, stdiobuf, strstreambuf, conbuf.

L'exemple qui suit illustre les flux fonctionnant avec ios et l'emploi de formateurs pour manipuler des fichiers.

Exemple :

#include <windows.h>
#include 
#include <fstream.h>

LONG lFin=E_FAIL;

void main()
{
// générer un flux en sortie associe a un fichier

ofstream sortie("_test.txt",ios::sbinary); // _test.txt est un nom de fichier comme 
// tout autre. On aurait pu mettre test.txt ou t_text.txt , ca n'y changerait que dalle
// soyez créatifs :) newbies bien surs

// écrire dans le fichier

sortie<<"il est très confortable d'écrire dans " <<1<<" fichier ";
sortie<<endl;
// comme vous le notez il est possible d'écrire sur autant de lignes qu'on le souhaite avec le // C++ et la STL
sortie<<" certains formateurs sont disponibles : "<< hex << 20<<endl;

// fermer le flux précédemment ouvert
close();

// générer un flux associé à un fichier
ifstream entree("_test.txt"); 

unsetf(ios::skipws); // il ne faut surtout pas ignorer les espaces==

// affichage
unsigned char c;
while(entree>>c) // lire le caractère
cout<<c; // l'affichage final à l'écran

// fermer le flux d'entrée
close();
return lFin; // même message que pour _text un peu plus haut :)
}

Pour les opérations d'entrée/sortie, l'approche des flux hisse C++ au niveau des langages moderne qui séparent données et emplacement.
Partant de ce principe inéluctable, l'adaptation d'un programme utilisant des fichiers à une version réseau devient alors trop simple.

Fin du tuto ...

A bientôt,
donc, t bonne prog,
Wina, La Vista , ciao ! et a++ :=)

Ce document intitulé « Standard template library(stl) » issu de CodeS SourceS (codes-sources.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Rejoignez-nous