• QT 通用算法可以在任何提供STL风格迭代器的容器类上使用


    "std:copy算法:"
    QVector("one", "two", "three")

    "std::equal算法:"
    equal: true

    "std::find算法:"
    "two"

    "std::fill算法:"
    ("eleven", "eleven", "eleven")

    "std::count算法:"
    count of 6: 3

    "std::lower_bound算法:返回第一个出现5的位置,如果没有5,则返回5应该在的位置"
    (3, 3, 5, 6, 6, 6, 8)
    "std::sort排序算法:使用快速排序算法对list2a进行升序排序,排序后两个12的位置不确定"
    (6, 12, 12, 33, 68)

    "std::stable_sort算法:使用稳定排序算法对list2a进行排序"
    (6, 12, 12, 33, 68)

    "std::greater算法:可以在qSort()算法中使其反向排序"
    (68, 33, 12, 12, 6)

    "swap交换算法:"
    pi: 2.71 e: 3.14

    头文件中,Qt提供了一些全局的模板函数,这些函数是可以使用在容器上的十分常用的算法。我们可以在任何提供了STL风格迭代器的容器类上用这些算法,包括QList、QLinkedList、QVector、QMap和QHash。如果在目标平台上可以使用STL,那么可以使用STL的算法来代替Qt的这些算法,因为STL提供了更多的算法,而Qt只提供了其中最重要的一些算法。

    在历史上,Qt曾经提供的函数是许多STL算法函数的直接等价物。从Qt 5.0开始,QT鼓励我们直接使用STL中可用的实现;大多数Qt已经被弃用(尽管它们仍然可以用于保持旧的代码编译,但会有警告)。

    大多数情况下,使用废弃的Qt算法函数的应用程序可以很容易地移植到使用等效的STL函数。你需要
    添加#include 头文件,并将Qt函数替换为STL对应函数,如下表所示。

     

    1. #include
    2. //src7_11 通用算法
    3. #include
    4. #include
    5. #include
    6. #include
    7. int main(int argc, char *argv[])
    8. {
    9. QCoreApplication a(argc, argv);
    10. QStringList q_stringlist;
    11. q_stringlist<<"one"<<"two"<<"three";
    12. qDebug()<tr("std:copy算法:");
    13. QVector q_vect(3);
    14. //将q_stringlist的所有复制到q_vect中
    15. std::copy(q_stringlist.begin(),q_stringlist.end(),q_vect.begin());
    16. qDebug()<
    17. qDebug()<tr("std::equal算法:");
    18. //从q_stringlist的开始到结束的所有项目与q_vect的开始及其后面的等数量的项目进行比较
    19. //全部相同则返回true
    20. bool ret1=std::equal(q_stringlist.begin(),q_stringlist.end(),q_vect.begin());
    21. qDebug()<<"equal:"<
    22. qDebug()<tr("std::find算法:");
    23. //从q_stringlist中查找"two",返回第一个对应的值得迭代器,如果没有找到则返回end();
    24. QList::iterator q_iter=std::find(q_stringlist.begin(),q_stringlist.end(),"two");
    25. //查找到后显示结果
    26. qDebug()<<*q_iter;
    27. qDebug()<tr("std::fill算法:");
    28. std::fill(q_stringlist.begin(),q_stringlist.end(),"eleven");
    29. qDebug()<
    30. QList<int> list2;
    31. list2<<3<<3<<6<<6<<6<<8;
    32. qDebug()<tr("std::count算法:");
    33. int count_of_6=std::count(list2.begin(),list2.end(),6);//查找6的个数
    34. qDebug()<<"count of 6:"<
    35. qDebug()<tr("std::lower_bound算法:返回第一个出现5的位置,如果没有5,则返回5应该在的位置");
    36. //返回第一个出现5的位置,如果没有5,则返回5应该在的位置
    37. //list2被查找的范围中的项目必须是升序
    38. QList<int>::iterator q_iter2=std::lower_bound(list2.begin(),list2.end(),5);
    39. list2.insert(q_iter2,5);
    40. qDebug()<
    41. QList<int> list2a;
    42. list2a<<33<<12<<68<<6<<12;
    43. qDebug()<tr("std::sort排序算法:使用快速排序算法对list2a进行升序排序,排序后两个12的位置不确定");
    44. std::sort(list2a.begin(),list2a.end());
    45. qDebug()<
    46. qDebug()<tr("std::stable_sort算法:使用稳定排序算法对list2a进行排序");
    47. //排序前在前面的12,排序后依然在前面
    48. std::stable_sort(list2a.begin(),list2a.end());
    49. qDebug()<
    50. qDebug()<tr("std::greater算法:可以在qSort()算法中使其反向排序");//by txwtech
    51. qSort(list2a.begin(),list2a.end(),std::greater<int>());
    52. qDebug()<
    53. qDebug()<tr("swap交换算法:");
    54. double pi=3.14;
    55. double e=2.71;
    56. std::swap(pi,e);
    57. qDebug()<<"pi:"<"e:"<
    58. return a.exec();
    59. }


     

  • 相关阅读:
    threejs灯光阴影
    SSM项目整合 文件上传
    Linux操作系统命令
    论文阅读笔记(六)——基于改进深度学习方法的股骨x线骨折自动检测与定位
    理论+实操,带你了解多沙箱容器运行时Kuasar
    Lesson 04 模板入门
    基于阿里云GPU云服务器的AIACC助力UC搜索业务性能提效380%,每年节省数千万成本
    c语言---数组(超级详细)
    基于jsp+ssm的网上图书商城-计算机毕业设计
    Lock 锁底层实现
  • 原文地址:https://blog.csdn.net/txwtech/article/details/126962468