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