¿Qué es el iterador Interator de C?
Un contenedor es una referencia general a una estructura de datos y un iterador es una referencia general a un puntero, que puede apuntar a elementos. El contenedor equivale a un armario de almacenamiento y contiene muchos artículos diferentes, como elementos de almacenamiento, como pan, cerveza, manzanas y dinero en efectivo. Para obtener cada objeto, deberás utilizar una herramienta que coincida con cada objeto. Por ejemplo, se utiliza un plato para obtener pan, una taza para obtener cerveza, una canasta para obtener manzanas y una billetera para obtener dinero en efectivo. . La función de un iterador es equivalente a la abstracción de una herramienta para sacar objetos. Por iterador, generalmente se refiere a la herramienta para sacar objetos del almacén en la vida real. Un iterador C es un tipo de datos que examina e itera sobre elementos dentro de un contenedor. 1 Definiciones de iterador En C, un iterador es cualquier objeto que, apuntando a algún elemento en un rango de elementos (como una matriz o un contenedor), tiene la capacidad de iterar a través de los elementos de ese rango usando un conjunto de operadores (al menos , los operadores de incremento ( ) y desreferencia (*)). La forma más obvia de iterador es un puntero: un puntero puede apuntar a elementos en una matriz y puede iterar a través de ellos usando el operador de incremento (). Por ejemplo, cada tipo de contenedor (como un vector) tiene un tipo de iterador específico diseñado para iterar a través de sus elementos de manera eficiente. C Un iterador Interator es un puntero a algún tipo de objeto STL. Este puntero hace que sea fácil y conveniente recorrer todos los elementos. Iterador en C es un concepto importante en STL. El concepto de iterador surge de la abstracción de atravesar una herramienta de contenedor lineal, es decir, cómo se puede acceder a un elemento de este contenedor. Para la matriz más simple, por supuesto, puede usar el valor de índice de la matriz, porque la matriz se almacena continuamente en la memoria, pero para una lista vinculada, debe usar un puntero; Además, existen muchos tipos de estructuras de datos que necesitan proporcionar una herramienta conveniente para acceder a los elementos que contienen. Los métodos incluyen ID, palabras clave, etc. Para unificar el uso de esta herramienta para todos los contenedores, los desarrolladores que proporcionan un conjunto completo de contenedores generalmente utilizarán una forma de representar las herramientas de acceso de varios contenedores. Por ejemplo, C++ STL usa iterador. Posición de uso de contenedores propios de MFC. C# y Java también tienen sus propios métodos, pero los métodos permanecen sin cambios. El uso de iterador se puede unificar, pero los principios de los diferentes contenedores subyacentes que implementan su iterador son diferentes. Por ejemplo, se puede entender que el iterador se mueve al siguiente elemento del contenedor. Si la capa inferior es una matriz, simplemente agregue el valor del índice en uno; si la capa inferior es una lista vinculada, debe realizar una operación similar a; m_pCurrent = m_pCurrent-gt; pSiguiente;. Por lo tanto, cada contenedor tiene su propio método de implementación de iterador.
Los métodos comúnmente utilizados del iterador C STL son: el iterador se mueve al siguiente elemento iterador: se mueve al elemento anterior *el iterador accede al valor del elemento señalado por el iterador gt == != comparación entre iteradores, como determinar; qué elemento está en La operación de suma entre iterador1 e iterador2 es similar a la suma de puntero 2. El tipo de iterador del contenedor. Cada tipo de contenedor define su propio tipo de iterador C, como vector:vectorlt;intgt;::iterator iter; define una variable llamada iter, su tipo de datos es el tipo de iterador definido por vectorlt;intgt;. Cada tipo de contenedor de biblioteca estándar define un miembro llamado iterador, donde iterador tiene el mismo significado que el tipo real de iterador. Operaciones de inicio y fin Cada contenedor define un par de funciones denominadas inicio y fin que devuelven iteradores. Si hay elementos en el contenedor, el iterador devuelto por start apunta al primer elemento: vectorlt;intgt;::iterator iter = ivec.begin(); La declaración anterior inicializa iter con el valor devuelto por la operación denominada vector. Suponiendo que el vector no está vacío, después de la inicialización, iter significa que el elemento es ivec [0]. El iterador C devuelto por la operación final apunta al "elemento al lado del final" del vector. "iterador final". Indica que apunta a un elemento que no existe. Si el vector está vacío, el iterador devuelto por start es el mismo que el iterador devuelto por end. El iterador devuelto por la operación final no apunta a ningún elemento real en el vector. En cambio, simplemente actúa como centinela para indicar que hemos procesado todos los elementos en el vector. a) Utilice un iterador para leer cada elemento en el vector vectorlt; intgt; ivec(10, 1); for (vectorlt; intgt;:: iterator iter=ivec.begin(); iter!=ivec.end(); iter) {*iter=2; // Use * para acceder al elemento señalado por el iterador}b) const_iterator solo puede leer los elementos en el contenedor, pero no puede modificar for(vectorlt; intgt;:: const_iterator citer=ivec.begin( ); citer!=ivec.end(); citer ){coutlt; lt; *citer=3; error}3 operación de incremento y desreferenciación del vector C El tipo de iterador define algunas operaciones para obtener el elemento señalado. por el iterador y permite al programador mover el iterador de un elemento a otro. Los tipos de iterador pueden usar el operador de desreferencia (*) para acceder al elemento al que apunta el iterador: *iter = 0; el operador de desreferencia devuelve el elemento al que apunta actualmente el iterador. Suponiendo que iter apunta al primer elemento del objeto vectorial ivec, entonces *iter e ivec[0] apuntan al mismo elemento. El efecto de la declaración anterior es asignar el valor de este elemento a 0. El iterador utiliza el operador de incremento para mover el iterador hacia adelante y apuntar al siguiente elemento en el contenedor. Lógicamente hablando, la operación de incremento del iterador C es similar a la operación de incremento del objeto de tipo int.
Para objetos int, el resultado de la operación es "incrementar 1" el valor de tipo int, mientras que para objetos iteradores, es "avanzar una posición" el iterador en el contenedor. Entonces, si iter apunta al primer elemento, entonces iter apunta al segundo elemento. Dado que el iterador devuelto por la operación final no apunta a ningún elemento, no se puede desreferenciar ni incrementar.