Baseado em intervalo for Loop em C++

Jinku Hu 12 outubro 2023
  1. Use o loop for baseado em intervalo para imprimir os elementos de std::map em C++
  2. Use o Loop for baseado em intervalo para imprimir membros de struct em C++
Baseado em intervalo for Loop em C++

Este artigo demonstrará vários métodos sobre como usar um loop for baseado em intervalo em C++.

Use o loop for baseado em intervalo para imprimir os elementos de std::map em C++

O loop for baseado em intervalo é um equivalente mais legível do loop for regular. Ele pode ser usado para percorrer a matriz ou qualquer outro objeto que tenha funções-membro begin e end. Observe que usamos a palavra-chave auto e a referência ao elemento para acessá-lo. Neste caso, o item refere-se ao único elemento de std::map, que por acaso é do tipo std::pair. Assim, acessar os pares de valor-chave requer notação de ponto especial para acessá-los usando palavras-chave first/second.

#include <iostream>
#include <map>

using std::cin;
using std::cout;
using std::endl;
using std::map;
using std::string;

int main() {
  map<int, string> fruit_map = {{
                                    1,
                                    "Apple",
                                },
                                {
                                    2,
                                    "Banana",
                                },
                                {
                                    3,
                                    "Mango",
                                },
                                {
                                    4,
                                    "Cocoa",
                                }};

  for (auto &item : fruit_map) {
    cout << "[" << item.first << "," << item.second << "]\n";
  }

  return EXIT_SUCCESS;
}

Resultado:

[1,Apple]
[2,Banana]
[3,Mango]
[4,Cocoa]

Como alternativa, um loop baseado em intervalo pode acessar elementos usando notação de ligação estruturada e tornar o bloco de código mais conciso. No exemplo a seguir, demonstramos esse uso de ligação para acessar pares std::map.

#include <iostream>
#include <map>

using std::cin;
using std::cout;
using std::endl;
using std::map;
using std::string;

int main() {
  map<int, string> fruit_map = {{
                                    1,
                                    "Apple",
                                },
                                {
                                    2,
                                    "Banana",
                                },
                                {
                                    3,
                                    "Mango",
                                },
                                {
                                    4,
                                    "Cocoa",
                                }};

  for (const auto& [key, val] : fruit_map) {
    cout << "[" << key << "," << val << "]\n";
  }

  return EXIT_SUCCESS;
}

Resultado:

[1,Apple]
[2,Banana]
[3,Mango]
[4,Cocoa]

Use o Loop for baseado em intervalo para imprimir membros de struct em C++

A vinculação estruturada pode ser extremamente útil quando os elementos percorridos representam as estruturas relativamente maiores com vários membros de dados. Conforme mostrado no próximo código de exemplo, esses membros são declarados como uma lista de identificadores e, em seguida, referenciados diretamente sem a notação struct.member. Observe que a maioria dos contêineres STL podem ser percorridos usando o loop for baseado em intervalo.

#include <iostream>
#include <list>

using std::cin;
using std::cout;
using std::endl;
using std::list;
using std::string;

struct Person {
  string name;
  string surname;
  int age;
};

int main() {
  list<Person> persons = {{"T", "M", 11},
                          {"R", "S", 23},
                          {"J", "R", 43},
                          {"A", "C", 60},
                          {"D", "C", 97}};

  for (const auto& [n, s, age] : persons) {
    cout << n << "." << s << " - " << age << " years old" << endl;
  }

  return EXIT_SUCCESS;
}

Resultado:

T.M - 11 years old
R.S - 23 years old
J.R - 43 years old
A.C - 60 years old
D.C - 97 years old
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++ Loop