Vector C ++ de punteros ejemplos

Vector C ++ de punteros ejemplos
Un vector ordinario encontrado en la programación de C ++ es un vector de objetos del mismo tipo. Estos objetos pueden ser objetos u objetos fundamentales instanciados desde una clase. Este artículo ilustra ejemplos de vectores de punteros, al mismo tipo de objeto. Para usar un vector C ++, el programa debe incluir la biblioteca Vector, con una directiva.

Todo el código vectorial para este artículo está en la función Main (), a menos que se indique lo contrario. Sin embargo, el vector de punteros a diferentes tipos se aborda al final del artículo. Para apreciar el vector de pointers, es bueno recordar el conocimiento del vector de objetos.

Contenido del artículo

  • Recordar para vector de objetos
  • Vector de punteros del mismo tipo
  • Vector de punteros a diferentes tipos
  • Conclusión

Recuerde para el vector de objetos

Ejemplo de vector de personaje
El siguiente programa muestra un ejemplo de un vector de caracteres:

#incluir
#incluir
usando el espacio de nombres STD;
int main ()

vector vtr = 'u', 'v', 'w', 'x', 'y', 'z';
para (int i = 0; icout << vtr[i] << ";
cout << endl;
para (vector :: iterator it = vtr.comenzar(); él != VTR.fin(); IT ++)
cout << *it << ";
cout << endl;
regresar 0;

La salida es:

U v w x y z
U v w x y z

La misma lista se ha mostrado dos veces. La primera declaración en la función main () crea un vector de caracteres. Los siguientes dos segmentos de código, impriman la misma lista de vectores en el terminal. El primero de estos segmentos de código, usa índices. El segundo usa iteradores.

Vector de ejemplo entero
El siguiente programa muestra un ejemplo de un vector de INTS:

#incluir
#incluir
usando el espacio de nombres STD;
int main ()

vector vtr = 1, 2, 3, 4, 5, 6;
para (int i = 0; icout << vtr[i] << ";
cout << endl;
para (vector :: iterator it = vtr.comenzar(); él != VTR.fin(); IT ++)
cout << *it << ";
cout << endl;
regresar 0;

La salida es:

1 2 3 4 5 6
1 2 3 4 5 6

La misma lista se ha mostrado dos veces, de la misma manera, que en el código anterior.

Vector del ejemplo de objeto de cadena
Un puntero constante a los chars, apunta a una cadena literal. Un objeto de cadena se instancia desde la clase de cadena. Para tener un objeto de cadena, la biblioteca de cadenas debe incluirse con una directiva, en la parte superior del programa. Es posible y fácil tener un vector de objetos de cadena, como muestra el siguiente programa:

#incluir
#incluir
#incluir
usando el espacio de nombres STD;
int main ()

vector vtr = "one", "dos", "tres", "cuatro", "cinco";
para (int i = 0; icout << vtr[i] << ";
cout << endl;
para (vector :: iterator it = vtr.comenzar(); él != VTR.fin(); IT ++)
cout << *it << ";
cout << endl;
regresar 0;

La salida es:

uno dos tres CUATRO CINCO
uno dos tres CUATRO CINCO

La misma lista se ha mostrado dos veces, de la misma manera, que en el código anterior.

Vector del ejemplo de objeto instanciado
El programador puede crear su propia clase, instanciar objetos de la clase y luego poner los objetos en un vector. El siguiente programa ilustra esto:

#incluir
#incluir
usando el espacio de nombres STD;
clase thecla
público:
const char* str;
Thecla (char chs [])
str = chs;

;
int main ()

char ch1 [] = "text1", ch2 [] = "text2", ch3 [] = "text3", ch4 [] = "text4", ch5 [] = "text5";
THECLA OBJ1 (CH1), OBJ2 (CH2), OBJ3 (CH3), OBJ4 (CH4), OBJ5 (CH5);
vector vtr = obj1, obj2, obj3, obj4, obj5;
para (int i = 0; icout << vtr[i].str << ";
cout << endl;
para (vector :: iterator it = vtr.comenzar(); él != VTR.fin(); IT ++)
cout cout << endl;
regresar 0;

La salida es:

text1 text2 text3 text4 text5
text1 text2 text3 text4 text5

La misma lista se ha mostrado dos veces, de la misma manera, que en el código anterior.

La clase tiene un constructor y un miembro de datos públicos. El constructor asigna su argumento a este miembro de datos.

Los valores del vector, esta vez, son literales de cadena y no objetos de cadena. Entonces, tenga en cuenta la forma en que se han codificado los literales y los elementos vectoriales.

Si un objeto instanciado desde la clase es OBJ, entonces el valor del miembro, STR se accederá a través del objeto, como:

obj.stri

obj en este caso es una referencia. Tenga en cuenta el uso del operador DOT. Es por eso que, en el segmento de código último pero uno, en la función Main (), se ha accedido a cada valor vectorial como:

VTR [i].stri

donde [i] es el índice.

Si un puntero a OBJ es "it", entonces el valor del miembro, STR se accederá a través del objeto, como:

it-> str

Tenga en cuenta el uso del operador de flecha aquí. El iterador es como un puntero. Es por eso que, en el último segmento de código, se ha accedido a cada valor vectorial como:

it-> str

donde "it" es el iterador.

Vector de punteros del mismo tipo

Ejemplo para el vector de punteros a los personajes
El siguiente programa muestra un ejemplo de un vector de punteros a Chars:

#incluir
#incluir
usando el espacio de nombres STD;
int main ()

char ch1 = 'u', ch2 = 'v', ch3 = 'w', ch4 = 'x', ch5 = 'y', ch6 = 'z';
vector vtr = & ch1, & ch2, & ch3, & ch4, & ch5, & ch6;
para (int i = 0; icout << *vtr[i] << ";
cout << endl;
para (vector :: iterator it = vtr.comenzar(); él != VTR.fin(); IT ++)
cout << **it << ";
cout << endl;
regresar 0;

La salida es:

U v w x y z
U v w x y z

La misma lista se ha mostrado dos veces. La primera declaración en la función main () crea 6 caracteres con sus identificadores. La segunda declaración representa estos caracteres, con sus direcciones en la memoria; y eso da como resultado un vector de punteros a Chars. Tenga en cuenta el argumento de la plantilla de este vector. Los siguientes dos segmentos de código, impriman la misma lista de vectores en el terminal. El primero de estos segmentos de código usa índices. El segundo usa iteradores.

Para el primero de estos segmentos de código, dado que cada elemento en el vector es un puntero, la referencia del índice debe ser desactivada por el operador de indirección, *.

El iterador es como un puntero. Para el segundo de estos segmentos de código, ya que cada elemento en el vector es un puntero, y el iterador es como un puntero, cada elemento se ve como un puntero al puntero. Y así, cada elemento tiene que ser desamado dos veces, con **.

Ejemplo de vector de punteros a enteros
El siguiente programa, que es similar al anterior, muestra un ejemplo de un vector de punteros a INTS:

#incluir
#incluir
usando el espacio de nombres STD;
int main ()

int1 = 1000, int2 = 2000, int3 = 3000, int4 = 4000, int5 = 5000, int6 = 6000;
vector vtr = & int1, & int2, & int3, & int4, & int5, & int6;
para (int i = 0; icout << *vtr[i] << ";
cout << endl;
para (vector :: iterator it = vtr.comenzar(); él != VTR.fin(); IT ++)
cout << **it << ";
cout << endl;
regresar 0;

La salida es:

1000 2000 3000 4000 5000 6000
1000 2000 3000 4000 5000 6000

La misma lista se ha mostrado dos veces, de la misma manera, a partir del código anterior.

Ejemplo de vector de punteros a objetos de cadena
Un puntero constante a los chars, apunta a una cadena literal. Un objeto de cadena se instancia desde la clase de cadena. Para tener un objeto de cadena, la biblioteca de cadenas debe incluirse con una directiva, en la parte superior del programa. Es posible y fácil tener un vector de punteros en los objetos de cadena, como muestra el siguiente programa:

#incluir
#incluir
#incluir
usando el espacio de nombres STD;
int main ()

cadena str1 = "aaa", str2 = "bbb", str3 = "ccc", str4 = "ddd", str5 = "eee", str6 = "fff";
vector vtr = & str1, & str2, & str3, & str4, & str5, & str6;
para (int i = 0; icout << *vtr[i] << ";
cout << endl;
para (vector :: iterator it = vtr.comenzar(); él != VTR.fin(); IT ++)
cout << **it << ";
cout << endl;
regresar 0;

La salida es:

AAA BBB CCC DDD EEE FFF
AAA BBB CCC DDD EEE FFF

La misma lista se ha mostrado dos veces, de la misma manera, a partir del código anterior.

Vector de punteros a objetos de clase definidos por el usuario

El programador puede crear su propia clase, instanciar objetos de la clase y luego poner punteros a los objetos, en un vector. El siguiente programa ilustra esto:

#incluir
#incluir
usando el espacio de nombres STD;
clase thecla
público:
const char* str;
Thecla (char chs [])
str = chs;

;
int main ()

char ch1 [] = "text1", ch2 [] = "text2", ch3 [] = "text3", ch4 [] = "text4", ch5 [] = "text5";
THECLA OBJ1 (CH1), OBJ2 (CH2), OBJ3 (CH3), OBJ4 (CH4), OBJ5 (CH5);
vector vtr = & obj1, & obj2, & obj3, & obj4, & obj5;
para (int i = 0; icout cout << endl;
para (vector :: iterator it = vtr.comenzar(); él != VTR.fin(); IT ++)
cout cout << endl;
regresar 0;

La salida es:

text1 text2 text3 text4 text5
text1 text2 text3 text4 text5

La misma lista se ha mostrado dos veces, de la misma manera, que en el código anterior.

La clase tiene un constructor y un miembro de datos públicos. El constructor asigna su argumento a este miembro de datos.

Los valores del vector, esta vez, son literales de cadena y no objetos de cadena. Entonces, tenga en cuenta la forma en que se han codificado los literales y los elementos vectoriales.

Si un objeto instanciado desde la clase es OBJ, entonces el valor del miembro, STR se accederá a través del objeto, como:

obj.stri

obj en este caso es una referencia. Si un puntero a OBJ es PTR, entonces el valor del miembro, STR se accedería a través del puntero, como:

ptr-> str

Es por eso que en el último pero un segmento de código, se ha accedido a cada valor vectorial como:

vtr [i]-> str

Si PTRPTR es un puntero a PTR (puntero al puntero), el valor del miembro, STR se accedería a través del puntero, como:

(*ptrptr)-> str

Los paréntesis aseguran que (*PTRPTR) se evalúe primero, en lugar de la posible primera evaluación de (PtrPtr-> STR).

El iterador es como un puntero. Es por eso que en el último segmento de código, se accede a cada valor vectorial como:

(*it)-> str

donde "it" es el iterador.

Vector de punteros a diferentes tipos

Para tener un vector de punteros a diferentes tipos, use el siguiente procedimiento:

  • Deje que la plantilla del vector, sea un puntero a la nula.
  • Deje que los valores de los vectores sean direcciones de los diferentes objetos de diferentes tipos.
  • Al leer los valores, arroje los punteros vacíos a sus tipos apropiados.

El siguiente programa ilustra estos, con objetos Char, Int y String:

#incluir
#incluir
#incluir
usando el espacio de nombres STD;
int main ()

char ch = 'u';
int Inte = 1000;
cadena str = "Te amo.";
vector vtr = & ch, & inte, & str;
cout << *((char*)vtr[0]) << endl;
cout << *((int*)vtr[1]) << endl;
cout << *((string*)vtr[2]) << endl;
regresar 0;

La salida es:

U
1000
Te amo.

Conclusión

Un vector de punteros es similar a un vector de objetos. Las principales diferencias son las siguientes: los valores del vector de punteros deben ser direcciones de objetos declarados o instanciados de la clase. Suponga que el nombre de la clase es thecla, entonces el argumento de la plantilla del vector debe ser "thecla*". La dirección de un objeto se obtiene precediendo el identificador del objeto, con & .