Menu
CoddyTech

遍历集合

本课属于 Coddy C++ 学习旅程的“逻辑与流程”单元。第 39 课,共 56 课。

现在你已经会向集合中添加、检查和删除元素了,接下来学习如何遍历集合中的所有元素。基于范围的 for 循环是访问每个元素最简洁的方式。

下面介绍如何遍历集合:

std::set<std::string> fruits = {"banana", "apple", "cherry"};

for (const std::string& fruit : fruits) {
    std::cout << fruit << std::endl;
}

最重要的一点是,集合会自动保持排序顺序。遍历上面的水果集合时,输出会是 "apple", "banana", "cherry",而不是你插入它们的顺序。自动排序是使用 std::set 的主要优势之一。

这种排序后的迭代方式让集合非常适合按字母顺序或数字顺序显示数据,无需手动排序。无论你处理的是数字、字符串还是其他可比较的类型,集合都会始终按照自然排序顺序呈现它们。

challenge icon

挑战

简单

编写一个程序,演示 std::set 的自动排序功能:将单词添加到集合中,然后遍历集合,按字母顺序显示这些单词。本挑战将检验你对集合的范围 for 循环以及集合如何保持排序的理解。

程序将接收以下输入:

  • 一个整数 n,表示要添加到集合中的单词数量
  • 接着是 n 个字符串,表示要插入集合的单词

你的程序应当:

  1. 创建一个空的 std::set<std::string>
  2. 读取要添加的单词数量
  3. 使用循环读取每个单词,并通过 .insert() 方法将其插入集合
  4. 使用范围 for 循环遍历集合并输出每个单词
  5. 输出所有单词后,显示集合中不重复单词的总数

请使用以下精确的输出格式:

集合中的每个单词(按字母顺序排列):

[word]

最后输出摘要:

Total unique words: [count]

使用语法为 for (const std::string& word : wordSet) 的范围 for 循环遍历集合中的所有元素。集合会自动按字母顺序排列单词,这体现了使用 std::set 的一项主要优势。请记住,如果输入中有重复的单词,集合会自动忽略它们,因此只会显示不重复的单词。

亲手试试

#include <iostream>
#include <set>
#include <string>
using namespace std;

int main() {
    // 读取单词的数量
    int n;
    cin >> n;
    
    // 创建一个空集合来存储单词
    set<string> wordSet;
    
    // TODO: 在这里编写你的代码
    // 读取 n 个单词,并将它们插入集合
    // 使用基于范围的 for 循环遍历集合,并打印每个单词
    // 打印不重复单词的总数
    
    return 0;
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: C++ 在线编译器