Comment obtenir des informations en C ++ en utilisant un itérateur à accès aléatoire

La plupart des conteneurs vous permettent d'effectuer un accès aléatoire de données qu'ils contiennent. Par exemple, la Accès aléatoire exemple montre que vous pouvez créer une iterator puis ajouter ou soustraire du décalage actuel pour obtenir des valeurs dans le conteneur qui iterator soutient:

#comprendre #comprendre using namespace std-int main () {vecteur Words-Words.push_back("Blue")-Words.push_back("Green")-Words.push_back("Teal")-Words.push_back("Brick")-Words.push_back("Purple")-Words.push_back("Brown")-Words.push_back("LightGray")-// Définir un iterator.vector aléatoire:: iterator = Words.begin Iter () - // Accès points.Iter aléatoire + = 5 cout lt; lt; * Iter lt; lt; endl-Iter - = 2-cout lt; lt; * Iter lt; lt; endl-retour 0-}

Dans ce cas, la vecteur, mots, contient une liste de sept éléments. Le code crée un iterator pour Mots nommé Iter. Il ajoute ensuite ou se soustrait à la iterator offset et affiche l'écran de sortie. Voici ce que vous voyez lorsque vous exécutez cet exemple:

BrownBrick



Parfois vous avez besoin pour effectuer une tâche particulière en utilisant un accès aléatoire iterator. Par exemple, vous pouvez créer une fonction spéciale pour sommer les membres de vecteur ou tout simplement une gamme de membres au sein de vecteur.

Dans ce cas, vous devez créer une fonction spécialisée pour effectuer la tâche comme suit car la bibliothèque standard ne comprend pas toutes les fonctions de le faire pour vous, comme indiqué dans le RandomAccess2 exemple:

#comprendre #comprendre using namespace std-modèle flotter AddIt (RandomAccessIterator commencer, fin RandomAccessIterator) {float Sum Index = 0-RandomAccessIterator - // Assurez-vous que les valeurs sont dans le bon order.If (début> fin) {RandomAccessIterator temp-temp = commencera-begin = fin-fin = tentation} pour (Index = Indice commencement! = Indice final ++) Somme + = * Indice de retour l'été} int main () {vecteur Numbers-Numbers.push_back(1.0)-Numbers.push_back(2.5)-Numbers.push_back(3.75)-Numbers.push_back(1.26)-Numbers.push_back(9.101)-Numbers.push_back(11.3)-Numbers.push_back(1.52)-// Résumer l'members.float individuelle Sum-Sum = AddIt (Numbers.begin (), Numbers.end ()) - cout lt; lt; Somme lt; lt; endl-Somme = AddIt (Numbers.end (), Numbers.begin ()) - cout lt; lt; Somme lt; lt; endl - // Somme un range.vector:: iterator = Numbers.begin Iter () - Iter = + 5 = Somme AddIt (Iter, Numbers.end ()) - cout lt; lt; Somme lt; lt; endl-retour 0-}

Cet exemple se fonde sur l'exemple précédent. Vous créez toujours vecteur, Numbers, et le remplir avec des données. Cependant, dans ce cas, vous créez une variable de sortie, Somme, qui contient la somme des éléments contenus dans Nombres.

AddIt () est une fonction spéciale qui accepte deux RandomAccessIterator les valeurs en entrée. Ces deux entrées représentent une gamme au sein de la vecteur que vous voulez manipuler en quelque sorte. L'exemple les ajoute tout simplement, mais vous pouvez effectuer toutes les tâches que vous voulez. Le résultat est une flotteur qui contient la sommation.

AddIt () fonctionne comme prévu. Vous appelez cela comme vous le feriez pour tout autre fonction et de fournir un point de départ et un point d'extrémité à l'intérieur vecteur. Les deux premiers appels à AddIt additionner la totalité vecteur, tandis que la troisième crée une iterator, change de décalage, puis résume une plage dans vecteur. Voici la sortie de cet exemple:

30.43130.43112.82

Un accès aléatoire iterator peut aller dans les deux sens. En outre, vous pouvez travailler avec les membres individuels dans le récipient fourni à iterator. En conséquence, les fonctions que vous créez pour iterator doit être capable de travailler avec les entrées dans un ordre quelconque. Comment gérez-vous cette exigence dépend du type de la fonction que vous créez.


» » » » Comment obtenir des informations en C ++ en utilisant un itérateur à accès aléatoire