• 【C++】常用遍历算法


    目录

    for_each

    transform


    常用算法概述

    • 算法主要有头文件
    •  是所有 STL 头文件中最大的一个,涉及 比较交换查找遍历操作修改
    •  定义了一些模板类,用来声明内建函数对象(仿函数)
    • 体积小,只包含几个在序列上面进行简单数学运算的模板函数

    for_each

    功能

    • 实现遍历容器,遍历容器元素

    函数原型

    for_each(iterator beg, iterator end, _func);

    beg   —— 开始迭代器

    end   —— 结束迭代器

    _func—— 函数或者函数对象

    测试代码:

    1. #include
    2. using namespace std;
    3. #include
    4. #include
    5. #include
    6. class Person {
    7. public:
    8. Person(string name, int age) :m_Name(name), m_Age(age) {}
    9. string m_Name;
    10. int m_Age;
    11. };
    12. // 普通函数
    13. void PrintVector1(Person& p) {
    14. cout << p.m_Name << " " << p.m_Age << endl;
    15. }
    16. // 仿函数
    17. class PrintVector2 {
    18. public:
    19. void operator()(Person& p) {
    20. cout << p.m_Name << " " << p.m_Age << endl;
    21. }
    22. };
    23. void test() {
    24. vectorPV;
    25. Person p1("张三", 19);
    26. Person p2("李四", 20);
    27. Person p3("王五", 18);
    28. PV.push_back(p1);
    29. PV.push_back(p2);
    30. PV.push_back(p3);
    31. // 普通函数
    32. for_each(PV.begin(), PV.end(), PrintVector1);
    33. // 函数对象
    34. for_each(PV.begin(), PV.end(), PrintVector2());
    35. }
    36. int main() {
    37. test();
    38. system("pause");
    39. return 0;
    40. }

    运行结果:


    transform

    功能

    • 搬运容器到另一个容器

    函数原型

    transform(iterator beg1, iterator end1, iterator beg2, _func);

    beg1  —— 源容器开始迭代器

    end1  —— 源容器结束迭代器

    beg2  —— 目标容器开始迭代器

    _func —— 函数或者函数对象

    测试代码:

    1. #include
    2. using namespace std;
    3. #include
    4. #include
    5. class Transform {
    6. public:
    7. int operator()(const int& val) {
    8. return val;
    9. }
    10. };
    11. class Print {
    12. public:
    13. void operator()(const int& val) {
    14. cout << val << " ";
    15. }
    16. };
    17. void test() {
    18. vector<int>v1;
    19. for (int i = 0; i < 10; ++i) {
    20. v1.push_back(i);
    21. }
    22. vector<int>v2; // 目标容器
    23. // 目标容器提前开辟空间
    24. v2.resize(v1.size());
    25. transform(v1.begin(), v1.end(), v2.begin(), Transform());
    26. for_each(v2.begin(), v2.end(), Print());
    27. }
    28. int main() {
    29. test();
    30. system("pause");
    31. return 0;
    32. }

    运行结果:

  • 相关阅读:
    数据结构——堆
    Typora表格中常用操作
    Bootstrap的一些主要作用
    浅谈6种流行的API架构风格
    <C++>初识多态,剖析virtual关键字
    Spring的资源管理(Resource)
    Open3D 泊松盘网格采样
    【小程序源码】2022全新模板的姓氏头像制作生成
    ElasticSearch(六):ES 的核心概念以及什么是倒排索引
    十四天学会C++之第一天(入门和基本语法)
  • 原文地址:https://blog.csdn.net/xuan3215/article/details/126171121