Cómo obtener información en c ++ usando un iterador de acceso aleatorio

La mayoría de los contenedores le permiten realizar acceso aleatorio de los datos que contienen. Por ejemplo, el Acceso aleatorio ejemplo muestra que se puede crear una iterador y luego añadir o restar de la corriente de compensación para obtener los valores dentro del contenedor que iterador apoya:

#incluir #incluir usando espacio de nombres std-int main () {vector Palabras-Words.push_back ("Azul") -Words.push_back ("Verde") -Words.push_back ("Teal") -Words.push_back ("Ladrillo") -Words.push_back ("Púrpura") -Words.push_back ("marrón") -Words.push_back ("Gris claro") - // define un iterator.vector al azar:: iterador Iter = Words.begin () - // Acceso points.Iter azar + = 5-cout lt; lt; * Iter lt; lt; endl-Iter - = 2-cout lt; lt; * Iter lt; lt; endl retorno 0-}

En este caso, el vector, Palabras, contiene una lista de siete elementos. El código crea una iterador para Palabras llamado iter. A continuación, añade o resta de la iterador compensar y muestra la pantalla de salida. Esto es lo que se ve cuando se ejecuta este ejemplo:

BrownBrick

A veces es necesario realizar una tarea especial utilizando un acceso aleatorio iterador. Por ejemplo, es posible que desee crear una función especial de sumar los miembros de vector o simplemente una serie de miembros dentro de vector.

En este caso, debe crear una función especializada para llevar a cabo la tarea de la siguiente manera debido a que la biblioteca estándar no incluye ninguna función de que lo haga por usted, como se muestra en la RandomAccess2 ejemplo:

#incluir #incluir using namespace std-plantilla flotar AddIt (RandomAccessIterator comenzar, terminar RandomAccessIterator) {float Suma = 0-RandomAccessIterator Índice - // Asegúrese de que los valores están en el order.if correcta (comienza gt; final) {RandomAccessIterator temp-temp = comenzará-begin = extremo a extremo = TEMP-} para (= Índice Índice COMIENZO! = End-Índice ++) Suma + = * SUM- Índice de retorno} int main () {vectorial Números-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) - // suma la members.float individuo Sum-Sum = AddIt (Numbers.begin (), Numbers.end ()) - cout lt; lt; Suma lt; lt; endl-Sum = AddIt (Numbers.end (), Numbers.begin ()) - cout lt; lt; Suma lt; lt; endl - // Suma un range.vector:: iterador Iter = Numbers.begin () - Iter + = 5-Sum = AddIt (Iter, Numbers.end ()) - cout lt; lt; Suma lt; lt; endl retorno 0-}

Este ejemplo se basa en el ejemplo anterior. Todavía se crea vector, Números, y llenarlo con los datos. Sin embargo, en este caso, se crea una variable de salida, Suma, que contiene la suma de los elementos contenidos en Números.

AddIt () es una función especial que acepta dos RandomAccessIterator valores como entrada. Estas dos entradas representan una gama dentro de la vector que se quiere manipular de alguna manera. El ejemplo simplemente les añade, pero se puede llevar a cabo cualquier tarea que desee. La salida es una flotador que contiene la suma.

AddIt () funciona según lo previsto. Se llama a como lo haría con cualquier otra función y proporcionar un punto de inicio y un punto final dentro de vector. Las dos primeras llamadas a AddIt sumar la totalidad vector, mientras que el tercero crea una iterador, cambia su desplazamiento y, a continuación resume un rango dentro del vector. Aquí está la salida de este ejemplo:

30.43130.43112.82

Un acceso aleatorio iterador puede ir en cualquier dirección. Además, se puede trabajar con los miembros individuales dentro del contenedor suministrado a iterador. Como resultado, las funciones para crear iterador debe ser capaz de trabajar con las entradas en cualquier orden. Cómo se trata este requisito depende del tipo de función se crea.

Artículos Relacionados