C++ 中基於範圍的 for 迴圈

Jinku Hu 2023年10月12日
  1. 在 C++ 中使用基於範圍的 for 迴圈來列印 std::map 的元素
  2. 使用基於範圍的 for 迴圈在 C++ 中列印 struct 的成員
C++ 中基於範圍的 for 迴圈

本文將介紹如何在 C++ 中使用基於範圍的 for 迴圈的多種方法。

在 C++ 中使用基於範圍的 for 迴圈來列印 std::map 的元素

基於範圍的 for 迴圈與常規 for 迴圈的可讀性更高。它可用於遍歷陣列或具有 beginend 成員函式的任何其他物件。請注意,我們使用 auto 關鍵字和對該元素的引用來訪問它。在這種情況下,item 指的是 std::map 的單個元素,恰好是 std::pair 型別的元素。因此,訪問鍵值對需要特殊的點表示法以使用 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;
}

輸出:

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

或者,基於範圍的迴圈可以使用結構化繫結符號訪問元素,並使程式碼塊更簡潔。在下面的示例中,我們演示了這種繫結用法,用於訪問 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;
}

輸出:

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

使用基於範圍的 for 迴圈在 C++ 中列印 struct 的成員

當遍歷的元素表示具有多個資料成員的相對較大的結構時,結構化繫結可能非常有用。如下面的示例程式碼所示,這些成員被宣告為識別符號列表,然後直接引用而沒有 struct.member 符號。請注意,大多數 STL 容器都可以使用基於範圍的 for 迴圈遍歷。

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

輸出:

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
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 創辦人。Jinku 在機器人和汽車行業工作了8多年。他在自動測試、遠端測試及從耐久性測試中創建報告時磨練了自己的程式設計技能。他擁有電氣/ 電子工程背景,但他也擴展了自己的興趣到嵌入式電子、嵌入式程式設計以及前端和後端程式設計。

LinkedIn Facebook

相關文章 - C++ Loop