HOWTO · C++
Como percorrer um array em C++
Este artigo demonstra como iterar sobre uma array em C++
Nesta página
Um array armazena uma quantidade fixa de elementos do mesmo tipo. Para percorrer cada elemento, escolha um loop conforme precise do índice, queira modificar os elementos ou prefira um algoritmo que aceite uma função invocável. Cada exemplo abaixo define seu próprio array e main, portanto pode ser compilado como um programa separado. (C++)
Usando um loop for com índice
Um loop com índice disponibiliza a posição atual em i. Suas três expressões inicializam o índice, verificam se ele ainda está dentro dos limites do array e o incrementam após cada passagem. A comparação usa < count porque um array com cinco elementos tem índices válidos de 0 a 4.
Execute este exemplo:
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
#include <iostream>
int main() {
int values[] = {10, 20, 30, 40, 50};
const int count = sizeof(values) / sizeof(values[0]);
for (int i = 0; i < count; ++i) {
std::cout << values[i] << ' ';
}
std::cout << '\n';
}
10 20 30 40 50
A expressão sizeof calcula a quantidade de elementos enquanto values ainda é um array. Se você passar o array para uma função, ele será tratado como um ponteiro dentro dela; portanto, passe a quantidade separadamente ou use um contêiner que informe seu tamanho. Mantenha a condição vinculada a essa quantidade e incremente i uma vez por iteração para evitar acessar uma posição além do último elemento.
Usando um loop while
Um loop while é útil quando a condição de continuidade é mais complexa do que uma simples contagem. Para percorrer um array, inicialize o índice antes do loop, verifique-o antes de acessar o elemento e incremente-o dentro do corpo do loop. Esquecer essa atualização pode impedir que o loop termine.
Execute este exemplo:
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
#include <iostream>
int main() {
int values[] = {5, 15, 25, 35};
const int count = sizeof(values) / sizeof(values[0]);
int i = 0;
while (i < count) {
std::cout << values[i] << ' ';
++i;
}
std::cout << '\n';
}
5 15 25 35
Esse loop percorre os elementos na ordem dos índices. Use um loop for quando a inicialização, a condição e a atualização fizerem parte do mesmo conjunto; use while quando a condição ou a atualização depender de outra operação realizada no loop.
Usando um loop for baseado em intervalo
Um loop baseado em intervalo percorre cada elemento diretamente, sem especificar um índice. Uma variável simples int value recebe uma cópia, o que é adequado para valores pequenos quando o loop apenas os lê. Use const int& para evitar cópias e manter os elementos somente para leitura, ou int& quando o loop precisar alterar o array original.
Execute este exemplo:
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
#include <iostream>
int main() {
int values[] = {1, 2, 3, 4, 5};
for (const int& value : values) {
std::cout << value << ' ';
}
std::cout << '\n';
}
1 2 3 4 5
Por exemplo, se você mudar a variável do loop para int& value e atribuir um valor a value, o elemento correspondente do array será atualizado. Essa forma é concisa quando cada elemento é processado em ordem e a posição não é necessária.
Usando std::for_each para percorrer um array
std::for_each é um algoritmo, não um método. Ele recebe os iteradores que apontam para o início e para a posição logo após o fim de um intervalo, seguidos por uma função invocável que é chamada para cada elemento. Inclua <algorithm> para usar o algoritmo e <array> para usar std::array.
Execute este exemplo:
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
#include <algorithm>
#include <array>
#include <iostream>
int main() {
std::array<int, 4> values = {2, 4, 6, 8};
std::for_each(values.begin(), values.end(), [](int value) {
std::cout << value * 2 << ' ';
});
std::cout << '\n';
}
4 8 12 16
A expressão lambda é a função invocável deste exemplo. O parâmetro int value recebe uma cópia de cada elemento; use int& value se a função precisar modificar o array. begin() identifica o primeiro elemento e end() marca a posição logo após o último, fornecendo ao algoritmo o intervalo completo a percorrer.
Escolhendo um loop para sua tarefa
Use um loop for com índice quando precisar da posição, comparar um elemento com o vizinho ou controlar o passo entre posições. Use while quando uma condição separada determinar quando o percurso termina. Escolha um loop for baseado em intervalo para acessar cada elemento diretamente e com clareza; use uma referência quando for importante evitar cópias ou modificar valores. Use std::for_each quando for adequado expressar o trabalho como uma função invocável em uma abordagem baseada em algoritmos. Todas essas formas podem percorrer um array; escolha conforme as informações e o controle exigidos pela tarefa e mantenha os acessos por índice dentro dos limites válidos do array.