Como encontrar o tamanho da array em C++
-
Utilize o
sizeof
operador para calcular o tamanho da array de estilo C em C++ -
Utilize
std::array
Container para armazenar dados de arrays e calcular seu tamanho -
Use o recipiente
std::vector
para armazenar dados do array e calcular seu tamanho -
Utilize
std::size
Método para calcular o tamanho da array
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;
}
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