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
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 ++)
coutcout << 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 ++)
coutcout << 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:
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 & .