【C++】迭代器

代码实例: 

#include <algorithm>    // 引入算法库以使用 sort 函数
#include <iterator>     // 引入迭代器库以使用 iterator 类
#include <vector>       // 引入 vector 容器
#include <iostream>     // 引入输入输出流库

using namespace std;    // 使用标准命名空间以简化代码编写

// 模板函数 mySort:对指定范围的元素进行排序并将结果输出到指定的输出范围
template<class T, class InputIterator, class OutputIterator>
void mySort(InputIterator first, InputIterator last, OutputIterator result)
{
    vector<T> s;                  // 创建一个 vector<T> 类型的容器来存储从输入迭代器读取的数据
    for (; first != last; ++first) // 遍历输入范围,将数据存储到 vector 中
    {
        s.push_back(*first);      // 将当前元素添加到 vector 中
    }
    sort(s.begin(), s.end());    // 对 vector 中的元素进行排序
    copy(s.begin(), s.end(), result); // 将排序后的结果复制到输出迭代器指定的位置
}

int main()
{
    // 测试代码:对 double 类型的数组进行排序
    double a[5] = {1.2, 2.4, 0.8, 3.3, 3.2}; // 定义一个 double 类型的数组
    mySort<double>(a, a + 5, ostream_iterator<double>(cout, " ")); // 调用 mySort 对数组进行排序,并将结果输出到标准输出流
    cout << endl; // 输出换行符

    // 测试代码:从标准输入中读取整数,进行排序,并输出结果
    mySort<int>(istream_iterator<int>(cin), istream_iterator<int>(), ostream_iterator<int>(cout, " ")); // 调用 mySort 对输入的整数进行排序,并将结果输出到标准输出流
    cout << endl; // 输出换行符

    return 0; // 程序正常结束
}

代码分析

(1)、

  1. 头文件引入:

    • #include <algorithm>: 提供了排序算法 sort
    • #include <iterator>: 提供了 iterator 类以及输入/输出迭代器。
    • #include <vector>: 提供了 vector 容器类。
    • #include <iostream>: 提供了输入输出流。
  2. mySort 模板函数:

    • 模板参数:
      • T:数据类型。
      • InputIterator:输入迭代器类型。
      • OutputIterator:输出迭代器类型。
    • 功能:
      • 从输入迭代器 first 到 last 范围内读取数据,将其存储到 vector 中,进行排序,然后将排序后的数据复制到输出迭代器 result 指定的位置。
    • 实现细节:
      • 使用 vector<T> 存储数据,以便可以使用 sort 进行排序。
      • copy 函数将排序后的数据写入到输出流中。
  3. main 函数:

    • 第一个示例:
      • 对一个 double 类型的数组 a 进行排序,使用 ostream_iterator<double> 将结果输出到标准输出流。
    • 第二个示例:
      • 从标准输入中读取整数(使用 istream_iterator<int>),排序后通过 ostream_iterator<int> 输出结果。注意,用户需要输入数据,并以回车结束输入以完成排序和输出。
  4. 输出:

    • 第一个示例将输出排序后的 double 数组值,例如 0.8 1.2 2.4 3.2 3.3
    • 第二个示例将根据用户输入的整数进行排序并输出。

注意:在实际运行时,第二个示例需要在输入完数据后按回车键,以便 istream_iterator 完成数据读取。

(2)、在使用 mySort 函数对输入的整数进行排序时,需要按照以下步骤在键盘上操作以输入数据并查看排序结果:

  1. 运行程序: 首先编译并运行程序。这将启动程序并等待你的输入。

  2. 输入数据:

    • 当程序运行到 mySort<int>(istream_iterator<int>(cin), istream_iterator<int>(), ostream_iterator<int>(cout, " ")); 这一行时,程序会等待你从键盘输入整数。
    • 输入整数并按下 Enter 键。例如,如果你输入 4 1 3 2,每个整数后面用空格分隔,然后按下 Enter 键,程序将把这些输入的整数传递给 mySort 函数。
  3. 结束输入:

    • 在输入完所有整数后,你需要告诉程序输入已经完成。在大多数控制台中,你可以通过输入 Ctrl+D(在 UNIX/Linux 系统中)或 Ctrl+Z(在 Windows 系统中)来表示输入结束。
    • 输入 Ctrl+D 或 Ctrl+Z 后,程序将会结束输入阶段,并开始处理数据。
  4. 查看排序结果(再按enter键):

    • 程序会对你输入的整数进行排序,并将结果输出到屏幕上。
    • 如果你的输入是 4 1 3 2,程序将输出排序后的结果,例如 1 2 3 4,并在最后输出一个换行符。

 class解释:

template<class T, class InputIterator, class OutputIterator>

在 C++ 模板中,classtypename 关键字是等效的,可以用来定义模板参数。它们都用于声明一个模板的参数类型。

例如,template<class T, class InputIterator, class OutputIterator> 中的 class 关键字用于声明模板参数:

  • class T: 代表一个类型参数 T,可以在模板中使用不同的数据类型。
  • class InputIterator 和 class OutputIterator: 分别代表输入和输出迭代器类型参数,允许模板函数或类接受不同的迭代器类型。

实际上,也可以用 typename 替代 class,效果是一样的:

template<typename T, typename InputIterator, typename OutputIterator>
void myFunction(InputIterator first, InputIterator last, OutputIterator result);
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

data_structure_wr

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值