简单STL归纳

2 篇文章 0 订阅

陆续的题目以及部分没有写的内容将会在近期补上,初学者请多指教~~直接进入正题吧

STL主要分为:①非修改操作 ②非修改操作;

主要的头文件有:

#include<algorithm> // 算法头文件
#include<functional>
#include<vector>
#include<queue>
#include<set>
#include<map>

一、非修改操作:
//find() 寻找x出现的位置
//count() 寻找出现次数
eg:

int main()
 {
    int i;
    int a[5] = {1, 3 , 2 , 1 , 3};
    //非修改操作
    //find()  寻找
    //count()  寻找出现次数
    int ans = find(a, a + n, 3) - a;
    // 访问范围[0, n), 寻找5  返回地址 , 得到下标, 复杂度 O(n);
    int cnt = count(a, a + n, 3);  // 访问范围【0, n) 寻找3出现的次数;
    printf("%d\n", ans);
    printf("%d\n", cnt);
    return 0;
    }

二、修改操作
//swap() 交换两个相同类型的变量
//reverse() 反转数组
//unique() 数组去重
//fill()* 以指定值填充数组
//copy()* 拷贝数组
eg:

    int A = 5, B = -5;
    int a[5] = {1, 3 , 2 , 1 , 3};
    swap(A, B);   //交换A  B
    reverse(a, a + 5); //反转
    for (i = 0;i <= 4;i ++)
     {
        printf("%d ",a[i]);
     }
     printf("\n");
     int newlen = unique(a, a + 5) - a; //去重
     for (i = 0;i <= newlen - 1;i ++)
      {
        printf("%d ",a[i]);
     }
     printf("\n");
    printf("%d %d\n", A, B);

排序
//sort() 排序
//stable_sort* 稳定排序 ————保证输出顺序与输入顺序相同————添加functional头文件
eg:

 int newa[5] = {1, 3, 2, 1, 3};
    sort(newa, newa + n);
    for (i = 0;i <= 4;i ++)
     {
        printf("%d ",newa[i]);
     }
     printf("\n");
      stable_sort(newa, newa + n, greater<int>()); //int为数据类型 greater为排序要求
      for (i = 0;i <= 4;i ++)
     {
        printf("%d ",newa[i]);
     }
     printf("\n");

//二分查找 __先排序————一定要排序!!!
//binary_search() 寻找是否出现———— bool型 复杂度log(n);
//lower_bound() 返回第一个小于等于K的值
//upper_bound() 返回第一个大于等于K的值

     sort(a, a + 5);
     printf("%ld\n",upper_bound(a, a + 5, 2) - a);
     printf("%ld\n",lower_bound(a, a + 5, 2) - a);

//集合操作 *
//merge() 合并
//set_union()* 求并集

———————————————————————————

//堆
// make_heap()
// push_heap()
// pop_heap()
// sort_heap()

———————————————————————————
//最值操作
//min() max()
//min_element() 数组中的最小值 复杂度O(n)
//max_element() 数组中的最大值 复杂度O(n);

推荐题目: 模拟EXCEL排序 + 堆中的路径

——————————————————————————
《VECTOR》
//vector __动态数组 末尾插入
//头文件vector
// 不定长数组,随加随用
// 适合不断想尾部追加元素
// push_back() 向尾部追加元素
// pop_back() 从尾部删除元素
// front() 返回第一个元素
// back() 返回最后一个元素
// insert() 插入元素
// erase() 删除元素 + 删除元素的下标
// clear() 清空vector

      vector<int>x;
      x.push_back(1); //插入
      x.push_back(2);
      x.push_back(3);
      for (i = 0;i < x.size();i ++)   //x.size()为长度
     {
        printf("%d ",x[i]);
     }
     printf("\n");

     x.pop_back();
      for (i = 0;i < x.size();i ++)   //x.size()为长度
     {
        printf("%d ",x[i]);
     }
     printf("\n");

     x.insert(x.begin() + 1, 5); //在a[1]的位置插入K

     for (i = 0;i < x.size();i ++)   //x.size()为长度
     {
        printf("%d ",x[i]);
     }
     printf("\n");

     x.erase(x.begin() + 1);  //删除a[1]
     for (i = 0;i < x.size();i ++)   //x.size()为长度
     {
        printf("%d ",x[i]);
     }

推荐题目: 说反话 + 打印学生选课清单

———————————————————————————

/stack __栈
// 灵活方便
// push(); 入栈
// pop(); 将顶栈元素弹出
// top(); 返回栈顶
// empty(); 判断是否为空
// size(); 返回栈元素数量

———————————————————————————
// //queue 队列 ———— queue
// push(); 入栈
// pop(); 将顶栈元素弹出
// top(); 返回栈顶
// empty(); 判断是否为空
// size(); 返回队列元素数量
// front(); 返回对首元素

// priority_queue 优先队列 ———— queue ————默认 大到小排序
// push(); 入栈
// pop(); 将顶栈元素弹出
// top(); 返回栈顶
// empty(); 判断是否为空
// size(); 返回队列元素数量

priority_queue<int, vector<int>, greater<int> >q; //从小到大排序
     q.push(3);
     q.push(1);
     q.push(5);
     while(!q.empty())
        {
           printf("%d\n", q.top());
           q.pop();
        }
     printf("\n");
     printf("\n");

    priority_queue<int>p; //从大到小排序
     p.push(3);
     p.push(1);
     p.push(5);
     while(!p.empty())
        {
           printf("%d\n", p.top());
           p.pop();
        }

——————————————————————————
//set ———— 集合
// 传统意义上的集合
// 元素不重复(自动去重)
// insert() 插入元素到集合
// erase() 从集合删除元素
// count() 返回元素是否存在
// size() 返回集合元素个数
// clear() 清空

set<int>s;
    s.insert(1);
    s.insert(2);
    s.insert(3);
    s.insert(2);
    set<int>::iterator it;

    for (it = s.begin(); it != s.end(); ++ it)  //遍历
     {
        printf("%d ", *it);
     }

推荐题目 : 集合相似度 + 列车调度

——————————————————————————
// map ———— 映射 ———— 哈希 ??字符串 ??
// 按照<键,值>的形式映射
// 直接按照数组的形式操作
// a[“abc”] 哈希
// b[123456789] 大数组
// insert()插入键值对
// count()判断键是否存在
// erase()删除键
// clear()清空map

map<string, int>mpl;
   mpl["abc"] = 1;
   mpl["abb"] = 2;
   printf("%d\n", mpl["aaa"]); //不存在的 都为0
   printf("\n");
   printf("\n");
   printf("\n");

   map<long long , int>mp2;
   mp2[1234567890] = 3;
   printf("%d\n",mp2[1234567890]);

推荐题目 :树种的统计 + 航空公司VIP客户查询;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值