C++ stl 初步

1、使用sort()函数,需要头文件 <algorithm>,且默认升序排序,用户可自定义cmp实现降序排序。

演示如下:

#include <iostream>
#include <algorithm>
using namespace std;

bool cmp(const int& a, const int& b) {
	return a > b;
}
void Print_Array(int* a, int n) {
	for (int i = 0; i < n; ++i)
		cout << '\t' << a[i] << " ";
	cout << endl;
}
int main() {
	//使用硬编码方式生成小数组数据,并输出原数组数据
	const int SIZE = 10;
	int	a[SIZE] = { 1,3,5,7,9,2,4,6,8,10 };
	Print_Array(a, SIZE);

	//STL排序,默认为升序,"<=",并输出排序后数组
	sort(a, a + SIZE);
	Print_Array(a, SIZE);

	//STL排序,自定义为降序,">=",并输出排序后数组
	sort(a, a + SIZE,cmp);
	Print_Array(a, SIZE);

	return 0;
}
2、

upper_bound();

lower_bound()::在first和last中的前闭后开区间进行二分查找,返回大于或等于val的第一个元素位置。如果所有元素都小于val,则返回last的位置

举例如下:

一个数组number序列为:4,10,11,30,69,70,96,100.设要插入数字3,9,111.pos为要插入的位置的下标

pos = lower_bound( number, number + 8, 3) - number,pos = 0.即number数组的下标为0的位置。

pos = lower_bound( number, number + 8, 9) - number, pos = 1,即number数组的下标为1的位置(即10所在的位置)。

pos = lower_bound( number, number + 8, 111) - number, pos = 8,即number数组的下标为8的位置(但下标上限为7,所以返回最后一个元素的下一个元素)。

所以,要记住:函数lower_bound()在first和last中的前闭后开区间进行二分查找,返回大于或等于val的第一个元素位置。如果所有元素都小于val,则返回last的位置,且last的位置是越界的!!~

返回查找元素的第一个可安插位置,也就是“元素值>=查找值”的第一个元素的位置


测试代码如下:


#include <iostream>
#include <algorithm>
#include <functional>
#include <vector>

using namespace std;


int main()
{
    const int VECTOR_SIZE = 8 ;

    // Define a template class vector of int
    typedef vector<int > IntVector ;

    //Define an iterator for template class vector of strings
    typedef IntVector::iterator IntVectorIt ;

    IntVector Numbers(VECTOR_SIZE) ;

    IntVectorIt start, end, it, location ;

    // Initialize vector Numbers
    Numbers[0] = 4 ;
    Numbers[1] = 10;
    Numbers[2] = 11 ;
    Numbers[3] = 30 ;
    Numbers[4] = 69 ;
    Numbers[5] = 70 ;
    Numbers[6] = 96 ;
    Numbers[7] = 100;

    start = Numbers.begin() ;   // location of first
                                // element of Numbers

    end = Numbers.end() ;       // one past the location
                                // last element of Numbers

    // print content of Numbers
    cout << "Numbers { " ;
    for(it = start; it != end; it++)
        cout << *it << " " ;
    cout << " }\n" << endl ;

    // return the first location at which 10 can be inserted
    // in Numbers
    location = lower_bound(start, end, 1) ;

    cout << "First location element 10 can be inserted in Numbers is: "
        << location - start<< endl ;
}

3、集合与映射

 set::

set<int>

每个元素最多出现一次,与sort一样自定义类型也可以构造set,但同样必须定义 小于 这个运算符

set˙中默认由小到大排好序

map::

map<int ,int > 例如:m[5] = 7;


set头文件中的set和map分别是集合与映射。二者都支持insert、find、count、remove、操作,并且可以按照由小到大的顺序循环遍历其中的元素。map还提供了‘ [] ’ 运算符,使得map可以像数组一样使用


 

4、优先队列

默认是最大堆

 头文件#include<queue>

用priority_queue<int> q; 声明

越小整数优先级越低的优先队列,出队元素不一定是最先入队的元素

取得队首元素操作top();

入队push();

出队pop();

要实现一个个位数大的整数优先级反而小,的优先队列,可以定义一个结构体cmp ,重载运算符“()”,

然后用priority_queue<int,vector<int>,cmp> q;声明

struct cmp{
    bool operator () (const int a,const int b){
        return a>b;
    }
};

5、下一个排列

在头文件algorithm中 函数 next_permutation提供求下一个排列

#include <iostream>
#include <cmath>
#include <queue>
#include <algorithm>
using namespace std;

int main(){
    int n,p[10];
    cin >> n;
    for(int i=0;i<n;i++){
        cin >> p[i];
    }
    
    sort(p,p+n);
    
    do{
        for(int i=0;i<n;i++)
            cout << p[i] << ' ';
        cout << endl;
    }while(next_permutation(p,p+n));
    
    return 0;
}

需要注意的是,上述代码同样适用于可重集

枚举排列的常见方法有俩种:一种是递归枚举,另一种是用STL中的next_permutation















  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的体育馆管理系统,源码+数据库+毕业论文+视频演示 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本体育馆管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此体育馆管理系统利用当下成熟完善的SpringBoot框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的Mysql数据库进行程序开发。实现了用户在线选择试题并完成答题,在线查看考核分数。管理员管理收货地址管理、购物车管理、场地管理、场地订单管理、字典管理、赛事管理、赛事收藏管理、赛事评价管理、赛事订单管理、商品管理、商品收藏管理、商品评价管理、商品订单管理、用户管理、管理员管理等功能。体育馆管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 关键词:体育馆管理系统;SpringBoot框架;Mysql;自动化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值