Контейнеры STL: vecteur. partie 3

Noter cet article




La STL de контейнеры C , Standard Template Library, vecteur ++, vecteur c ++

la la leçon précédente мы определили переменную типа vecteur<flotte>, comme un tableau équivalent, la taille dont nous pouvons arbitrairement changer le cours de l'exécution de code. Mais cela ne signifie pas (ainsi que des vecteurs pour classique C ++), nous pouvons ainsi créer des tableaux dynamiques que des types intégrés simples. Type d'objet vecteur Il peut être arbitraire et arbitrairement complexe! par exemple, nous pourrions décrire comme un groupe d'étudiants:

La STL de контейнеры C , Standard Template Library, vecteur ++, vecteur c ++

Dans cet exemple,, entre autre, nous avons appliqué ce pointeur et la surcharge des opérateurs. Je laisse des liens vers vous, si quelqu'un a besoin de rafraîchir la mémoire.

Vector modèle de classe (et tout conteneur STL) peut être, à son tour, контейнер STL. par exemple vecteur< vecteur<int> > ou vecteur< vecteur< vecteur<int> > > (ne pas oublier l'espace entre la parenthèse fermante ‘>‘ - Il est une caractéristique de l'analyseur syntaxique). Ainsi nous pouvons, par exemple, créer une classe de matrices triangulaires:

La STL de контейнеры C , Standard Template Library, vecteur ++, vecteur c ++
Le prochain niveau de notre entrer dans la technique des vecteurs, et conteneurs STL en général, Il est le concept de iterator. Iterator - le concept central de travailler avec des conteneurs STL. iterator – il est une abstraction, qui est utilisé pour itérer (répéter) éléments STL dans un récipient et fournir un accès aux éléments individuels. iterator p Il est un pointeur, mais, au début, vous pouvez conditionnellement le considérer comme quelque chose de semblable en apparence: *p désignera la valeur des données dans le cadre du itérateur courant, p ++ l'itérateur à l'élément suivant dans le conteneur, et p– (lorsque cela est permis) - Dans l'article précédent. Pour les différents types de contenants, itérateurs correspondantes peuvent demander à l'une des 5 catégories: entrées, weekend, unidirectionnel, accès bidirectionnel et aléatoire. vecteurs itérateurs - un itérateur accès direct. Voilà pourquoi les vecteurs peuvent être opération d'indexation. ces, suffisamment de surface, Les connaissances sur nous assez itérateurs, pour commencer à travailler avec eux.

itérateurs Vosproizvedёm en termes de problème de trouver tous les nombres premiers, ne dépassant pas N (tamis d'Eratosthène), nous avons déjà décidé plus tôt Technologie tableaux C ++ de:

Comme on peut facilement le voir à partir de la description vecteur<bool>::iterator, iterator qui maintient une sorte de récipient, qui se réfère à, et le type de ce récipient. Cela nécessite assez lourd pour écrire une description précise du type de iterator. Mais la dernière norme C ++ 11 introduit le concept type éclosabilité: si le type d'objet souhaité est dérivé du contexte de son utilisation, le type de l'objet peut être déclaré descripteur auto (Type de sortie). Puis la ligne 16 le code ci-dessus peut être écrite comme:

enfin, vecteurs (et pour tous les conteneurs, ayant bi-directionnel iteratorы, comme indiqué plus haut) Il peut être défini itérateurs inversée, ne sont pas déplacés depuis le début jusqu'à la fin du récipient, et vice versa - à partir de la fin vers le début. Ce iterator doit être déclarée comme un type très différent, par exemple:

Mais ici, nous pouvons compter sur l'inférence de type, comme dans l'exemple ci-dessous:

La STL de контейнеры C , Standard Template Library, vecteur ++, vecteur c ++

Toutes les questions soulevées à poser dans les commentaires leçon.

Bulletin de nouvelles leçons sur la programmation:

huile

Sur huile

une expérience pratique sur le développement de logiciels 40 ans. société de logiciels internationale Global Teacher Logic. IBM Developer Works auteur permanent des publications. éditeur scientifique de l'ordinateur littérature maison d'édition "Symbole-Plus", Saint-Pétersbourg.

2 réflexions sur "Контейнеры STL: vecteur. partie 3

Laisser un commentaire

Placez le code dans les balises: <pre class="lang:c ++ décodage:true ">VOTRE CODE</pré>