II. La librairie standard C++

Tout comme pour le langage C, pour lequel un certain nombre de fonctions ont été définies et standardisées et constituent la librairie C, une librairie de classes et de fonctions a été spécifiée pour le langage C++. Cette librairie est le résultat de l'évolution de plusieurs librairies, parfois développées indépendamment par plusieurs fournisseurs d'environnements C++, qui ont été fusionnées et normalisées afin de garantir la portabilité des programmes qui les utilisent. Une des principales briques de cette librairie est sans aucun doute la STL (abréviation de « Standard Template Library »), à tel point qu'il y a souvent confusion entre les deux.

Cette partie a pour but de présenter les principales fonctionnalités de la librairie standard C++. Bien entendu, il est hors de question de décrire complètement chaque fonction ou chaque détail du fonctionnement de la librairie standard, car cela rendrait illisibles et incompréhensibles les explications. Cependant, les informations de base vous seront données afin de vous permettre d'utiliser efficacement la librairie standard C++ et de comprendre les fonctionnalités les plus avancées lorsque vous vous y intéresserez.

La librairie standard C++ est réellement un sujet de taille. À titre indicatif, sa description est aussi volumineuse que celle du langage lui-même dans la norme C++. Mais ce n'est pas tout, il faut impérativement avoir compris en profondeur les fonctionnalités les plus avancées du C++ pour appréhender correctement la librairie standard. En particulier, tous les algorithmes et toutes les classes fournies par la librairie sont susceptibles de travailler sur des données de type arbitraire. La librairie utilise donc complètement la notion de template, et se base sur plusieurs abstractions des données manipulées et de leurs types afin de rendre générique l'implémentation des fonctionnalités. De plus, la librairie utilise le mécanisme des exceptions afin de signaler les erreurs qui peuvent se produire lors de l'exécution des méthodes de ses classes et de ses fonctions. Enfin, un certain nombre de notions algorithmiques avancées sont utilisées dans toute la librairie. La présentation qui sera faite sera donc progressive, tout en essayant de conserver un ordre logique. Tout comme pour la partie précédente, il est probable que plusieurs lectures seront nécessaires aux débutants pour assimiler toutes les subtilités de la librairie.

Le premier chapitre de cette partie (Chapitre 13) présente les notions de base qui sont utilisées dans toute la libraire : encapsulation des fonctions de la librairie C classique, classes de traits pour les types de base, notion d'itérateurs, de foncteurs, d'allocateurs mémoire et de complexité algorithmique. Le Chapitre 14 présente les types complémentaires que la librairie standard C++ définit pour faciliter la vie du programmeur. Le plus important de ces types est sans doute la classe de gestion des chaînes de caractères basic_string. Le Chapitre 15 présente les notions de flux d'entrée / sortie standards, et la notion de tampon pour ces flux. Les mécanismes de localisation (c'est-à-dire les fonctions de paramétrage du programme en fonction des conventions et des préférences nationales) seront décrits dans le Chapitre 16. Le Chapitre 17 est sans doute l'un des plus importants, puisqu'il présente tous les conteneurs fournis par la librairie standard. Enfin, le Chapitre 18 décrit les principaux algorithmes de la librairie, qui permettent de manipuler les données stockées dans les conteneurs.

Les informations décrites ici sont basées sur la norme ISO 14882 du langage C++, et non sur la réalité des environnements C++ actuels. Il est donc fortement probable que bon nombre d'exemples fournis ici ne soient pas utilisables tels quels sur les environnements de développement existants sur le marché, bien que l'on commence à voir apparaître des environnements presque totalement respectueux de la norme maintenant. De légères différences dans l'interface des classes décrites peuvent également apparaître et nécessiter la modification de ces exemples. Cependant, à terme, tous les environnements de développement respecteront les interfaces spécifiées par la norme, et les programmes utilisant la librairie standard seront réellement portables au niveau source.