Exemplos de vetor de ponteiros C ++

Exemplos de vetor de ponteiros C ++
Um vetor comum encontrado na programação C ++ é um vetor de objetos do mesmo tipo. Esses objetos podem ser objetos ou objetos fundamentais instanciados de uma classe. Este artigo ilustra exemplos de vetor de ponteiros, para o mesmo tipo de objeto. Para usar um vetor C ++, o programa deve incluir a biblioteca vetorial, com uma diretiva.

Todo o código vetorial para este artigo está na função principal (), a menos que indicado de outra forma. O vetor de ponteiros para tipos diferentes é, no entanto, abordado no final do artigo. Para apreciar o vetor de pontos, é bom recordar o conhecimento do vetor de objetos.

Conteúdo do artigo

  • Lembre-se de vetor de objetos
  • Vetor de ponteiros do mesmo tipo
  • Vetor de ponteiros para diferentes tipos
  • Conclusão

Lembre -se do vetor de objetos

Exemplo de vetor de personagem
O programa a seguir, mostra um exemplo de um vetor de chars:

#incluir
#incluir
usando namespace std;
int main ()

vetor vtr = 'u', 'v', 'w', 'x', 'y', 'z';
para (int i = 0; icout << vtr[i] << ";
cout << endl;
para (vetor :: iterator it = vtr.começar(); isto != vtr.fim(); IT ++)
cout << *it << ";
cout << endl;
retornar 0;

A saída é:

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

A mesma lista foi exibida duas vezes. A primeira declaração na função Main () cria um vetor de chars. Os próximos dois segmentos de código, imprimem a mesma lista de vetores no terminal. O primeiro desses segmentos de código, usa índices. O segundo usa iteradores.

Exemplo de vetor de inteiro
O programa a seguir, mostra um exemplo de um vetor de INTs:

#incluir
#incluir
usando namespace std;
int main ()

vetor vtr = 1, 2, 3, 4, 5, 6;
para (int i = 0; icout << vtr[i] << ";
cout << endl;
para (vetor :: iterator it = vtr.começar(); isto != vtr.fim(); IT ++)
cout << *it << ";
cout << endl;
retornar 0;

A saída é:

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

A mesma lista foi exibida duas vezes, da mesma maneira, como no código anterior.

Exemplo de objeto de vetor de string
Um ponteiro const para chars, aponta para uma corda literal. Um objeto String é instanciado da classe String. Para ter um objeto de string, a biblioteca de string deve ser incluída com uma diretiva, no topo do programa. É possível e fácil ter um vetor de objetos de string, como mostra o seguinte programa:

#incluir
#incluir
#incluir
usando namespace std;
int main ()

vetor vtr = "One", "dois", "três", "quatro", "cinco";
para (int i = 0; icout << vtr[i] << ";
cout << endl;
para (vetor :: iterator it = vtr.começar(); isto != vtr.fim(); IT ++)
cout << *it << ";
cout << endl;
retornar 0;

A saída é:

um dois três quatro cinco
um dois três quatro cinco

A mesma lista foi exibida duas vezes, da mesma maneira, como no código anterior.

Vetor de exemplo de objeto instanciado
O programador pode criar sua própria classe, instanciar objetos da classe e depois colocar os objetos em um vetor. O programa a seguir ilustra o seguinte:

#incluir
#incluir
usando namespace std;
classe thecla
público:
const char* str;
Thecla (chs 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);
vetor vtr = obj1, obj2, obj3, obj4, obj5;
para (int i = 0; icout << vtr[i].str << ";
cout << endl;
para (vetor :: iterator it = vtr.começar(); isto != vtr.fim(); IT ++)
cout cout << endl;
retornar 0;

A saída é:

texto1 text2 text3 text4 text5
texto1 text2 text3 text4 text5

A mesma lista foi exibida duas vezes, da mesma maneira, como no código anterior.

A classe tem um construtor e um membro de dados públicos. O construtor atribui seu argumento a este membro de dados.

Os valores do vetor, desta vez, são literais de cordas, e não objetos de string. Então, observe a maneira como os literais e elementos vetoriais foram codificados.

Se um objeto instanciado da classe for OBJ, o valor do membro, STR seria acessado através do objeto, como:

obj.str

OBJ neste caso é uma referência. Observe o uso do operador de pontos. É por isso que, no último, mas um segmento de código, na função principal (), cada valor do vetor foi acessado como:

vtr [i].str

onde [i] é o índice.

Se um ponteiro para OBJ for "It", então o valor do membro, STR seria acessado através do objeto, como:

it-> str

Observe o uso do operador de seta aqui. O iterador é como um ponteiro. É por isso que, no último segmento de código, cada valor do vetor foi acessado como:

it-> str

onde "it" é o iterador.

Vetor de ponteiros do mesmo tipo

Exemplo de vetor de ponteiros para personagens
O programa a seguir, mostra um exemplo de um vetor de ponteiros a Chars:

#incluir
#incluir
usando namespace std;
int main ()

char ch1 = 'u', ch2 = 'v', ch3 = 'w', ch4 = 'x', ch5 = 'y', ch6 = 'z';
vetor vtr = & ch1, & ch2, & ch3, & ch4, & ch5, & ch6;
para (int i = 0; icout << *vtr[i] << ";
cout << endl;
para (vetor :: iterator it = vtr.começar(); isto != vtr.fim(); IT ++)
cout << **it << ";
cout << endl;
retornar 0;

A saída é:

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

A mesma lista foi exibida duas vezes. A primeira declaração na função Main () cria 6 caracteres com seus identificadores. A segunda declaração representa esses personagens, com seus endereços na memória; e isso resulta em um vetor de ponteiros para chars. Observe o argumento do modelo deste vetor. Os próximos dois segmentos de código, imprimem a mesma lista de vetores no terminal. O primeiro desses segmentos de código usa índices. O segundo usa iteradores.

Para o primeiro desses segmentos de código, uma vez que cada elemento no vetor é um ponteiro, a referência do índice deve ser desreferenciada pelo operador de indireção, *.

O iterador é como um ponteiro. Para o segundo desses segmentos de código, uma vez que cada elemento no vetor é um ponteiro, e o iterador é como um ponteiro, cada elemento é visto como um ponteiro para o ponteiro. E assim cada elemento deve ser desredenciado duas vezes, com **.

Exemplo de vetor de ponteiros para inteiros
O programa a seguir, que é semelhante ao acima, mostra um exemplo de um vetor de ponteiros para o INTS:

#incluir
#incluir
usando namespace std;
int main ()

int int1 = 1000, int2 = 2000, int3 = 3000, int4 = 4000, int5 = 5000, int6 = 6000;
vetor vtr = & int1, & int2, & int3, & int4, & int5, & int6;
para (int i = 0; icout << *vtr[i] << ";
cout << endl;
para (vetor :: iterator it = vtr.começar(); isto != vtr.fim(); IT ++)
cout << **it << ";
cout << endl;
retornar 0;

A saída é:

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

A mesma lista foi exibida duas vezes, da mesma maneira, como do código anterior.

Exemplo de vetor de ponteiros para cordas de cordas
Um ponteiro const para chars, aponta para uma corda literal. Um objeto String é instanciado da classe String. Para ter um objeto de string, a biblioteca de string deve ser incluída com uma diretiva, no topo do programa. É possível e fácil ter um vetor de ponteiros para amarrar objetos, como mostra o seguinte programa:

#incluir
#incluir
#incluir
usando namespace std;
int main ()

string str1 = "aaa", str2 = "bbb", str3 = "ccc", str4 = "ddd", str5 = "eee", str6 = "fff";
vetor vtr = & str1, & str2, & str3, & str4, & str5, & str6;
para (int i = 0; icout << *vtr[i] << ";
cout << endl;
para (vetor :: iterator it = vtr.começar(); isto != vtr.fim(); IT ++)
cout << **it << ";
cout << endl;
retornar 0;

A saída é:

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

A mesma lista foi exibida duas vezes, da mesma maneira, como do código anterior.

Vetor de ponteiros para objetos de classe definidos pelo usuário

O programador pode criar sua própria classe, instanciar objetos da classe e depois colocar ponteiros nos objetos, em um vetor. O programa a seguir ilustra o seguinte:

#incluir
#incluir
usando namespace std;
classe thecla
público:
const char* str;
Thecla (chs 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);
vetor vtr = & obj1, & obj2, & obj3, & obj4, & obj5;
para (int i = 0; icout cout << endl;
para (vetor :: iterator it = vtr.começar(); isto != vtr.fim(); IT ++)
cout cout << endl;
retornar 0;

A saída é:

texto1 text2 text3 text4 text5
texto1 text2 text3 text4 text5

A mesma lista foi exibida duas vezes, da mesma maneira, como no código anterior.

A classe tem um construtor e um membro de dados públicos. O construtor atribui seu argumento a este membro de dados.

Os valores do vetor, desta vez, são literais de cordas, e não objetos de string. Então, observe a maneira como os literais e elementos vetoriais foram codificados.

Se um objeto instanciado da classe for OBJ, o valor do membro, STR seria acessado através do objeto, como:

obj.str

OBJ neste caso é uma referência. Se um ponteiro para OBJ for PTR, então o valor do membro, STR seria acessado através do ponteiro, como:

ptr-> str

É por isso que, no último, mas um segmento de código, cada valor do vetor foi acessado como:

vtr [i]-> str

Se o PTRPTR for um ponteiro do PTR (ponteiro do ponteiro), o valor do membro, STR seria acessado através do ponteiro, como:

(*ptrptr)-> str

Os parênteses garantem que (*ptrptr) seja avaliado primeiro, em vez da possível primeira avaliação de (ptrptr-> str).

O iterador é como um ponteiro. É por isso que no último segmento de código, cada valor do vetor foi acessado como:

(*it)-> str

onde "it" é o iterador.

Vetor de ponteiros para diferentes tipos

Para ter um vetor de ponteiros para diferentes tipos, use o seguinte procedimento:

  • Deixe o modelo do vetor, seja um ponteiro para anular.
  • Que os valores dos vetores sejam endereços dos diferentes objetos de diferentes tipos.
  • Ao ler os valores, lance as dicas vazias para seus tipos apropriados.

O programa a seguir ilustra estes, com objetos de char, int e string:

#incluir
#incluir
#incluir
usando namespace std;
int main ()

char ch = 'u';
int intere = 1000;
string str = "eu te amo.";
vetor vtr = & ch, & intere, & str;
cout << *((char*)vtr[0]) << endl;
cout << *((int*)vtr[1]) << endl;
cout << *((string*)vtr[2]) << endl;
retornar 0;

A saída é:

você
1000
Eu te amo.

Conclusão

Um vetor de ponteiros é semelhante a um vetor de objetos. As principais diferenças são as seguintes: os valores do vetor de ponteiros precisam ser endereços de objetos declarados ou instanciados da classe. Suponha que o nome da classe seja o Tecla, então o argumento do modelo do vetor deve ser "theCla*". O endereço de um objeto é obtido precedendo o identificador do objeto, com & .