QT学习笔记(十):通用算法示例

QT学习笔记(十):通用算法示例

std是C++标准库统一使用的命名空间(namespace)的名称,C++标准库中的名字全部都在std这个命名空间中,std也就是英文"standard"(标准)的缩写。
在这里插入图片描述

#include <QCoreApplication>
#include <QVector>
#include <QStringList>
#include <QDebug>

#include <functional> //因为用了std::greater<int>()
#include <algorithm>  // STL 标准模板算法库	

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QStringList list;
    list << "one" << "two" << "three";
    
    // 1、将list中所有项目复制到vect中
    qDebug() << QObject::tr("std::copy算法:");
    QVector<QString> vect(3);
    std::copy(list.begin(), list.end(), vect.begin());
    qDebug() << vect;
    //结果为one,two,three
    
    ///2、从list的开始到结束的所有项目与vect的开始及其后面的等数量的项目进行比较,
    // 全部相同则返回true
    qDebug() << endl << QObject::tr("std::equal算法:");
    bool ret1 = std::equal(list.begin(), list.end(), vect.begin());
    qDebug() << "euqal: " << ret1; 
    //结果为true
	
	// 3、从list中查找"two",返回第一个对应的值的迭代器,如果没有找到则返回end()
    qDebug() << endl << QObject::tr("std::find算法:");
    QList<QString>::iterator i = std::find(list.begin(), list.end(), "two");
    qDebug() << *i;     
	// 结果为"two"
	
	///4、将list中的所有项目填充为"eleven"
    qDebug() << endl << QObject::tr("std::fill算法:");
        std::fill(list.begin(), list.end(), "eleven");
    qDebug() << list;  
	// 结果eleven,eleven,eleven


    QList<int> list1;
    list1 << 3 << 3 << 6 << 6 << 6 << 8;
    // 5、查找6的个数
    qDebug() << endl << QObject::tr("std::count算法:");
   	int countOf6 = std::count(list1.begin(), list1.end(), 6);
    qDebug() << "countOf6: " << countOf6; 
	// 结果为3
	
	// 6、返回第一个出现5的位置,如果没有5,则返回5应该在的位置,
    // list1被查找的范围中的项目必须是升序
    qDebug() << endl << QObject::tr("std::lower_bound算法:");
    QList<int>::iterator j = std::lower_bound(list1.begin(), list1.end(), 5);
    list1.insert(j, 5);
    qDebug() << list1; 
	// 结果3,3,5,6,6,6,8


	QList<int> list2;
    list2 << 33 << 12 << 68 << 6 << 12;
    //7、使用快速排序算法对list2进行升序排序,排序后两个12的位置不确定
    qDebug() << endl << QObject::tr("std::sort算法:");
    std::sort(list2.begin(), list2.end());
    qDebug() << list2; 
    // 结果6,12,12,33,68
    
    // 8、使用一种稳定排序算法对list2进行升序排序,
    // 排序前在前面的12,排序后依然在前面
    qDebug() << endl << QObject::tr("std::stable_sort算法:");
    std::stable_sort(list2.begin(), list2.end());
    qDebug() << list2; 
    // 结果6,12,12,33,68

	///9、可以在qSort()算法中使其反向排序(替代std::sort)
    qDebug() << endl << QObject::tr("std::greater算法:");
    qSort(list2.begin(), list2.end(), std::greater<int>());
    qDebug() << list2; 
    // 结果68,33,12,12,6

	// 10、交换pi和e的值
    qDebug() << endl << QObject::tr("std::swap算法:");
    double pi = 3.14;
    double e = 2.71;
    std::swap(pi, e);                         
    qDebug() << "pi:" << pi << "e:" << e; 
    // 结果pi=2.71,e=3.14

    return a.exec();
}

运行结果:
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值