bucle for basato su intervalli in C++

Jinku Hu 12 ottobre 2023
  1. Usa il bucle basato su intervallo for per stampare elementi di std::map in C++
  2. Usa il bucle basato su intervallo for per stampare i membri di struct in C++
bucle for basato su intervalli in C++

Questo articolo dimostrerà diversi metodi su come utilizzare un cicli for basato su intervalli in C++.

Usa il bucle basato su intervallo for per stampare elementi di std::map in C++

Il cicli for basato su intervalli è un equivalente più leggibile del normale cicli for. Può essere usato per attraversare l’array o qualsiasi altro oggetto che abbia funzioni membro begin e end. Nota che usiamo la parola chiave auto e il riferimento all’elemento per accedervi. In questo caso, l ‘elemento si riferisce al singolo elemento di std::map, che risulta essere di tipo std::pair. Pertanto, l’accesso alle coppie chiave-valore richiede una speciale notazione del punto per accedervi utilizzando le parole chiave 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;
}

Produzione:

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

In alternativa, un bucle basato su intervalli può accedere agli elementi utilizzando la notazione di associazione strutturata e rendere il blocco di codice più conciso. Nell’esempio seguente, dimostriamo tale utilizzo dell’associazione per l’accesso alle coppie 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;
}

Produzione:

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

Usa il bucle basato su intervallo for per stampare i membri di struct in C++

L’associazione strutturata può essere estremamente utile quando gli elementi attraversati rappresentano le strutture relativamente più grandi con più membri di dati. Come mostrato nel codice di esempio successivo, questi membri vengono dichiarati come una lista di identificatori e quindi referenziati direttamente senza la notazione struct.member. Si noti che la maggior parte dei contenitori STL sono attraversabili utilizzando il cicli for basato su intervalli.

#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;
}

Produzione:

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
Autore: 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

Articolo correlato - C++ Loop