C ++ succinctement bibliothèque standard C ++

introduction

Il y a beaucoup plus d'éléments dans la bibliothèque standard C ++ que nous avons le temps de couvrir. Nous nous limiterons à examiner certaines des fonctionnalités les plus couramment utilisées que nous n'avons pas encore explorées..

Itérateurs

Les itérateurs servent les mêmes objectifs que IEnumerable et des interfaces associées dans .NET, telles que fournir un moyen commun de naviguer dans les collections. Donné un std :: vector, Par exemple, vous pouvez parcourir sa collection d'éléments à l'aide du code suivant:

 vecteur vec; vec.push_back (1); vec.push_back (4); vec.push_back (7); vec.push_back (12); vec.push_back (8); pour (auto i = début (vec); i! = fin (vec); i ++) wcout << *i << endl; 

le std :: begin fonction fournit un itérateur pointant vers le premier élément de la collection. std :: end fournit un itérateur qui signale que nous avons atteint la fin d'une collection; le dernier article de la collection, en supposant que la collection ait des articles, est un article avant l'article qui nous est donné par std :: end. C'est pourquoi nous vérifions! = Dans la boucle for. Si aucun élément ne figure dans la collection, alors std :: begin et std :: end retournera la même valeur.

En plus des itérateurs de ces deux fonctions de modèle, de nombreuses collections fournissent des itérateurs constants via des fonctions membres nommées cbegin et cend, des itérateurs inversés (qui parcourent une collection à l'envers) via commencer et déchirer, et const inverseurs via crbegin et se pencher. Dans l'exemple précédent, vous pouvez remplacer commencer (vec) avec vec.rbegin () et fin (vec) avec vec.rend () passer par le vecteur en sens inverse.


Plage basée sur les boucles

C ++ 11 a ajouté un type supplémentaire de boucle for, appelé boucle for basée sur la plage, qui fournit des fonctionnalités similaires à la boucle foreach en C #. La boucle for basée sur la plage utilise des itérateurs et vous évite les problèmes de dé-référencement des pointeurs et la possibilité d'une vérification incorrecte de la fin. La boucle for équivalente à la boucle for de l'exemple précédent ressemble à ceci:

 pour (article auto: vec) wcout << item << endl; 

std :: vector et autres conteneurs

La collection que vous utiliserez probablement le plus est std :: vector. C’est une collection rapide et polyvalente semblable à List dans .NET. Il se trouve dans le En tête de fichier.

Pour ajouter un élément à la fin d'un vecteur, utilisez la fonction member repousser. Pour supprimer un élément de la fin d’un vecteur, utilisez pop_back. Vous pouvez accéder aux éléments à leur index en utilisant [] de la même manière que vous le feriez pour un tableau. Pour ajouter un élément ou une plage d'éléments à un index de base zéro spécifique, utilisez la fonction insert member. Pour supprimer un élément ou une plage d'éléments à un index de base zéro spécifique, utilisez la fonction effacer le membre.

Une fonctionnalité intéressante ajoutée à C ++ 11 est la fonctionnalité de construction sur place fournie par les fonctions membres emplace et emplace_back. Plutôt que de construire un objet et d'utiliser ensuite insert ou push_back pour l'ajouter au vecteur, vous pouvez appeler emplace_back et lui transmettre simplement les mêmes arguments que vous transmettriez au constructeur pour le type que le vecteur contient. Le vecteur construira ensuite et ajoutera une nouvelle instance de l'objet sans les calculs supplémentaires fournis avec une copie ou un déplacement, et sans utiliser de mémoire supplémentaire..

le emplace function fonctionne de la même manière, sauf que vous commencez par lui transmettre un itérateur qui spécifie l'emplacement. Vous pouvez utiliser cbegin () ou cend () ajouter des éléments au début ou à la fin du vecteur. Si vous souhaitez placer un élément sur un index de base zéro spécifique, vous pouvez utiliser vec.cbegin () + idx. Vous pouvez également soustraire de cend () si vous voulez placer un objet un certain nombre d'espaces à partir de la fin.

vector offre plus de fonctionnalités, vous devez donc l'explorer davantage. La fonction at member vous donnera un élément à un index, par exemple. Il existe des moyens de demander au vecteur de redimensionner sa capacité interne afin de libérer de l'espace - si vous saviez qu'il vous faudrait exactement 125 éléments, par exemple, vous réduisez au minimum l'utilisation de la mémoire - si vous ajoutez tous les éléments dont il aura besoin et les contraintes de mémoire sont serrées.

En plus de std :: vector, plusieurs conteneurs similaires ont des cas d'utilisation différents. std :: vector lui-même est le meilleur choix lorsque vous avez besoin d'un accès extrêmement rapide et aléatoire, lorsque vous allez principalement ajouter et supprimer des éléments à la toute fin de la collection. Si vous devez également ajouter fréquemment des éléments au début de la collection, envisagez d'utiliser std :: deque au lieu.

Utilisation std :: queue pour un conteneur premier entré, premier sorti. Utilisez std :: stack pour un conteneur dernier entré, premier sorti.

le std :: carte la classe fournit un dictionnaire trié. std :: unordered_map fournit une table de hachage.

le std :: set class est une collection triée et à clé où l'élément stocké est sa propre clé. Chaque élément doit donc être unique.. std :: unordered_set est l'équivalent non trié de std :: set.

le std :: list la classe fournit une liste doublement chaînée. std :: forward_list fournit une liste liée individuellement.

le Entête

le header contient de nombreuses fonctions très utiles: rechercher, trier, copier et toutes les méthodes associées. La meilleure façon de les apprendre est de les expérimenter.

La bibliothèque d'exécution C (CRT)

Certaines fonctionnalités de la bibliothèque d'exécution C peuvent être utiles. En règle générale, le meilleur moyen d’accéder à la bibliothèque est d’inclure les informations pertinentes. fichier d'en-tête, tel que .

Conclusion

La bibliothèque standard C ++ a beaucoup plus à offrir, je vous recommande donc vivement de l'explorer et de vous familiariser avec elle. Dans le dernier article de cette série, nous explorons Visual Studio et sa meilleure utilisation pour le développement C ++..

Cette leçon représente un chapitre de C ++ Succinctly, un eBook gratuit de l’équipe de Syncfusion..