Como Converter Vetor em Array em C++

Jinku Hu 12 outubro 2023
  1. Utilize o dados() Método para converter um vetor em um array
  2. Utilize & Endereço do operador para converter um vetor em um vetor
  3. Use a função copy() para converter um vetor em uma array
Como Converter Vetor em Array em C++

Este artigo apresentará como converter um vetor em um array em C++.

Utilize o dados() Método para converter um vetor em um array

Como o Padrão C++ garante que os elementos do vector sejam armazenados contíguamente na memória, podemos chamar os dados, um método vetorial embutido, e atribuir o endereço de retorno ao ponteiro recém declarado double, como mostrado na seguinte amostra de código.

Note que qualquer modificação nos elementos utilizando o ponteiro d_arr irá alterar os elementos de dados do vetor original porque estamos meramente apontando para os elementos arr, mas não os copiando para um novo local.

#include <iostream>
#include <iterator>
#include <vector>

using std::cin;
using std::copy;
using std::cout;
using std::endl;
using std::vector;

int main() {
  vector<double> arr{-3.5, -21.1, -1.99, 0.129, 2.5, 3.111};

  copy(arr.begin(), arr.end(), std::ostream_iterator<double>(cout, "; "));
  cout << endl;

  double *d_arr = arr.data();
  for (size_t i = 0; i < arr.size(); ++i) {
    cout << d_arr[i] << "; ";
  }
  cout << endl;

  return EXIT_SUCCESS;
}

Resultado:

-3.5; -21.1; -1.99; 0.129; 2.5; 3.111;
-3.5; -21.1; -1.99; 0.129; 2.5; 3.111;

Utilize & Endereço do operador para converter um vetor em um vetor

Alternativamente, podemos utilizar o operador de amperagem, que toma o endereço do objeto na memória e o atribui a um ponteiro recentemente declarado a um double.

Neste exemplo, estamos tomando o endereço do primeiro elemento em vector, mas você pode extrair um ponteiro para qualquer outro elemento e fazer operações conforme necessário.

Os elementos podem ser acessados com a notação d_arr[index] array, e de forma similar ao método anterior, quaisquer modificações no d_arr estão afetando os dados do arr.

#include <iostream>
#include <iterator>
#include <vector>

using std::cin;
using std::copy;
using std::cout;
using std::endl;
using std::vector;

int main() {
  vector<double> arr{-3.5, -21.1, -1.99, 0.129, 2.5, 3.111};

  copy(arr.begin(), arr.end(), std::ostream_iterator<double>(cout, "; "));
  cout << endl;

  double *d_arr = &arr[0];
  for (size_t i = 0; i < arr.size(); ++i) {
    cout << d_arr[i] << "; ";
  }
  cout << endl;

  return EXIT_SUCCESS;
}

Use a função copy() para converter um vetor em uma array

O método copy() pode ser utilizado para converter um vetor em um array double para que os elementos de dados sejam copiados para um local de memória diferente. Mais tarde, podemos modificá-los sem nos preocuparmos em alterar os dados vetcor originais.

Note que estamos declarando um d_arr com 6 elementos fixos, que é alocado como memória empilhada. Na maioria dos cenários, o tamanho de uma array não será conhecido de antemão, portanto, seria necessário utilizar alocação dinâmica de memória com métodos como new ou malloc.

#include <iostream>
#include <iterator>
#include <vector>

using std::cin;
using std::copy;
using std::cout;
using std::endl;
using std::vector;

int main() {
  vector<double> arr{-3.5, -21.1, -1.99, 0.129, 2.5, 3.111};

  copy(arr.begin(), arr.end(), std::ostream_iterator<double>(cout, "; "));
  cout << endl;

  double d_arr[6];
  copy(arr.begin(), arr.end(), d_arr);
  for (size_t i = 0; i < arr.size(); ++i) {
    cout << d_arr[i] << "; ";
  }
  cout << endl;

  return EXIT_SUCCESS;
}

Resultado:

new_vec - | 97 | 98 | 99 | 100 | 101 |
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++ Vector