Criar Vector de Ponteiros em C++

Jinku Hu 12 outubro 2023
  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++
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 array 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::endl;
using std::vector;

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::endl;
using std::vector;

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::endl;
using std::vector;

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
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artigo relacionado - C++ Pointer