Como encontrar o tamanho da array em C++
-
Utilize o
sizeofoperador para calcular o tamanho da array de estilo C em C++ -
Utilize
std::arrayContainer para armazenar dados de arrays e calcular seu tamanho -
Use o recipiente
std::vectorpara armazenar dados do array e calcular seu tamanho -
Utilize
std::sizeMé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