Como encontrar o tamanho da array em C++

Jinku Hu 12 outubro 2023
  1. Utilize o sizeof operador para calcular o tamanho da array de estilo C em C++
  2. Utilize std::array Container para armazenar dados de arrays e calcular seu tamanho
  3. Use o recipiente std::vector para armazenar dados do array e calcular seu tamanho
  4. Utilize std::size Método para calcular o tamanho da array
Como encontrar o tamanho da array em C++

Este artigo introduzirá como obter o tamanho de array utilizando diferentes métodos C++.

Utilize o sizeof operador para calcular o tamanho da array de estilo C em C++

Primeiro, vamos ver o que acontece quando tentamos encontrar o tamanho das arrays do estilo C. Para este exemplo, definimos uma variável c_array e a inicializamos com 10 valores inteiros. Para calcular o tamanho desta array, utilizamos o sizeof operador unário, que retorna o tamanho do objeto em bytes. Basicamente, dividimos o número de bytes necessários para armazenar o objeto c_array com o tamanho de seu elemento único c_array[0]:

#include <iostream>

using std::cin;
using std::cout;
using std::endl;

int main() {
  int c_array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

  cout << "array size: " << sizeof c_array / sizeof c_array[0] << endl;
  return 0;
}

Resultado:

array size : 10

Como você pode ver, a saída parece correta. Agora vamos tentar definir uma função separada que faça o mesmo por nós:

#include <iostream>

using std::cin;
using std::cout;
using std::endl;

int get_array_size(int arr[]) { return sizeof arr / sizeof arr[0]; }

int main() {
  int c_array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

  cout << "array size: " << get_array_size(c_array) << endl;
  return 0;
}

Resultado:

array size : 2

Recebemos o número errado. Utilizar o sizeof operador não é um método confiável para resolver este problema. Para que o operador sizeof funcione corretamente, a array não deve ser recebida como parâmetro de função e não deve ser alocada dinamicamente (no Heap). Para identificar o uso incorreto do sizeof, as IDEs normalmente indicam as seções de código propensas a erros, mas também é possível especificar as bandeiras do compilador para os avisos a serem exibidos durante a compilação (por exemplo, -Wsizeof-pointer-div ou -Wall junto com gcc).

Não há uma maneira universal de calcular o tamanho das arrays do estilo C sem se preocupar com muitos casos de bordas, e é por isso que existe a classe std::vector.

Utilize std::array Container para armazenar dados de arrays e calcular seu tamanho

Antes de começarmos a utilizar std::vector, devemos mencionar std::array, que você pode utilizar para armazenar arrays de tamanho fixo. Ela se beneficia de ser eficiente em termos de recursos e tem um método de construção para recuperar o tamanho chamado size().

#include <array>
#include <iostream>

using std::array;
using std::cin;
using std::cout;
using std::endl;

int main() {
  array<int, 10> arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  cout << "array size: " << arr.size() << endl;

  return 0;
}

Use o recipiente std::vector para armazenar dados do array e calcular seu tamanho

O recipiente vetorial pode ser utilizado para armazenar arrays dinâmicas, e oferece múltiplos métodos para diferentes operações, incluindo o size().

#include <iostream>
#include <vector>

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

int main() {
  vector<int> int_array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  cout << "vector size: " << int_array.size() << endl;

  return 0;
}

Utilize std::size Método para calcular o tamanho da array

O método std::size faz parte da biblioteca <iterator> e pode operar com dados std::array, bem como std::vetor que retorna o número de elementos.

#include <array>
#include <iostream>
#include <vector>

using std::array;
using std::cin;
using std::cout;
using std::endl;
using std::size;
using std::vector;

int main() {
  vector<int> int_array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  array<int, 10> arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

  cout << "vector size: " << size(int_array) << endl;
  cout << "array size: " << size(arr) << endl;

  return 0;
}
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++ Array