Criar Vector de Ponteiros em C++

  1. Utilizar [] Notação para Criar Vectorial de Ponteiros em C++
  2. Utilize o operador new para criar vectores de apontadores na memória dinâmica em C++
  3. Utilize o std::vector Container para Criar Vector de Ponteiros em C++

Este artigo irá explicar vários métodos de como criar um vector de apontadores em C++.

Utilizar [] Notação para Criar Vectorial de Ponteiros em C++

Uma vez que os tipos de apontadores podem ser facilmente modificados, utilizaremos o int * nos exemplos seguintes para declarar um vector de apontadores. Em alternativa, podemos utilizar o ponteiro void * se for necessário um tipo de endereço genérico para armazenar estruturas de dados opacas ou, pelo contrário, utilizar um ponteiro para uma classe definida à medida.

Esta solução utiliza uma notação de matriz ao estilo C - [] que declara um array de comprimento fixo. É semelhante à declaração regular de array, mas, neste caso, estamos interessados em aceder aos endereços de cada elemento. Estamos a utilizar o operador & (endereço de) para aceder a apontadores no vector e imprimi-los para a consola. Note-se que estes endereços de memória estão localizados na memória da pilha.

#include <iostream>
#include <vector>

using std::cout;
using std::vector;
using std::endl;

constexpr int WIDTH = 8;

int main()
{
    int *pointers_vec[WIDTH];

    cout << "pointers_vec addresses:" << endl;
    for(auto &i : pointers_vec) {
        cout << &i << endl;
    }
    cout << endl;

    return EXIT_SUCCESS;
}

Resultado:

pointers_vec addresses:
0x7ffecd7a00d0
0x7ffecd7a00d8
0x7ffecd7a00e0
0x7ffecd7a00e8
0x7ffecd7a00f0
0x7ffecd7a00f8
0x7ffecd7a0100
0x7ffecd7a0108

Utilize o operador new para criar vectores de apontadores na memória dinâmica em C++

Por outro lado, podemos utilizar o new operador para criar um vector de apontadores dinamicamente alocados na pilha.

Esta solução requer que o programador liberte a memória antes de o programa sair; caso contrário, o código sofrerá com a fuga de memória, o que pode ser um enorme problema em aplicações de longa duração e ambientes de hardware com recursos limitados. Note-se que utilizamos a notação delete [] para limpar cada local num vector dinamicamente atribuído.

#include <iostream>
#include <vector>

using std::cout;
using std::vector;
using std::endl;

constexpr int WIDTH = 8;

int main()
{
    int *vector_of_pointers = new int[WIDTH];

    cout << "vector_of_pointers addresses:" << endl;
    for(int i = 0; i < WIDTH; ++i) {
        cout << &vector_of_pointers[i] << endl;
    }
    cout << endl;

    delete [] vector_of_pointers;
    return EXIT_SUCCESS;
}

Resultado:

vector_of_pointers addresses:
0x2561c20
0x2561c28
0x2561c30
0x2561c38
0x2561c40
0x2561c48
0x2561c50
0x2561c58

Utilize o std::vector Container para Criar Vector de Ponteiros em C++

std::vector oferece uma rica funcionalidade para alocar um vector de ponteiros e manipular o vector com múltiplas funções incorporadas. Este método proporciona uma interface mais flexível para a criação de novos elementos durante o tempo de execução. Note-se que inicializámos os elementos vectoriais com o valor nullptr, como mostra o exemplo seguinte.

#include <iostream>
#include <vector>

using std::cout;
using std::vector;
using std::endl;

constexpr int WIDTH = 8;

int main()
{
    vector<int *> vector_p(WIDTH, nullptr);

    cout << "vector_p addresses:" << endl;
    for(int i = 0; i < WIDTH; ++i) {
        cout << &vector_p[i] << endl;
    }
    cout << endl;

    return EXIT_SUCCESS;
}

Resultado:

vector_p addresses:
0x1255c20
0x1255c28
0x1255c30
0x1255c38
0x1255c40
0x1255c48
0x1255c50
0x1255c58

Artigo relacionado - C++ Pointer

  • Verificar se o ponteiro é NULL em C++
  • Usar Qualificador Constante Com Ponteiros em C++