Criar Vector de Ponteiros em C++
-
Utilizar
[]
Notação para Criar Vectorial de Ponteiros em C++ -
Utilize o operador
new
para criar vectores de apontadores na memória dinâmica em C++ -
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 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
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