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...
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...
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; }
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.
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++ :=)