C++:标准模板库STL笔记(概念+栗子=秒懂)

C++:标准模板库STL(Standard Template Library):

     写在前面:最近刷题的时候总是会遇见使用STL轻松解决的好家伙,所以用这篇文章来总结一下自己遇到的常用的ST了方法。持续更新中,用到就来完善一下这篇博文。

正文开始:

      STL,英文全称 standard template library,中文可译为标准模板库或者泛型库,其包含有大量的模板类和模板函数,可以用于完成诸如排序、 输入/输出、数学计算等常见功能的复用,进行泛型编程。
以下每一个都已经被写成了类进行了封装,我们可以直接使用, 可以按照不同的组件需求加入以下头文件:
在这里插入图片描述
或者直接加入万能头文件:#include<bits/stdc++.h>,这个头文件详情可以点击如何将力扣的C++代码在自己的编译器上运行?(力扣的输入输出)学习一下。

一、 向量vector:(类似于数组的数据结构)

      vector是序列容器,是一种占用连续内存地址的数据结构,这使得vector可以通过下标访问元素。可以把这个东西看做是一个可以在末尾插入元素的动态数组,当空间大小不够时,可以自动扩增,每次扩增大小为50%,将原先数据复制后释放原内存。
常用的向量类函数原型如下:(为了方便复制,本文常见的函数都会使用采用代码块写)

//-----定义------数组名字以nums为例
vector<类型>数组名字(数组大小,初始化值);   //一维数组定义概念,其中最后的括号里的数组大小、初始值可以省略,
eg:
1、vector<int>nums(10,0);
2、vector<int>nums(10);
3、vector<int>nums;
vector<vector<int>>nums(m,vector(n,0));  //和一维类似,二维vector的定义

//---返回值
nums.begin();                  //返回向量第一个元素为迭代器开始
nums.end();                   //返回向量最后一个元素为迭代器结束
nums.size();                  //返回数组大小 
nums.front();                 //数组开头的值

nums.empty();                 //判断数组是否为空

//----操作---
nums.push_back(n);                                    //末尾插入n
nums.pop_back();                                      //删除末尾
nums.insert(pos,n,x)                                  //从pos开始插入n个x
nums.clear();                                         //清空数组
sort(nums.begin(),nums.end());                        //数组从小到大排序,复杂度O(nlogn)
reverse(nums.begin(),nums.end());                     //翻转整个数组,可以和上一个结合实现从大到小排序
nums.erase(pos);                                      //移除pos位置的值



拷贝nums到nums2:
1)vector<int> nums2(nums);
2)vector<int>nums2;
nums2.assign(nums.begin(),nums.end());//assign代表用新元素替换原有内容。
3)vector<int> nums2;
nums2.swap(nbms);//swap代表交换两个容器的所有元素
4)遍历数组,依次插入:略

二、栈stack:一种先进后出的数据结构(FILO)

      栈是容器适配器,也会被我戏称为一种先进后厨的数据结构。栈的主要操作是栈顶(尾部)进行出栈入栈。

//----定义---
stack<类型>栈名;
eg: stack<int>st;

//---返回值---
st.size();             //返回栈的大小
st.empty();            //返回栈是否为空
st.top();              //栈顶的值

//---操作
st.push(x);             //进栈
st.pop(x);              //x出栈

三、队列queue:一种先进先出的数据结构

      队列是容器适配器,在队头删除,队尾插入。

//----定义队列---
queue<类型>名队列字
eg:queue<int>q;

//------返回值----
q.empty();
q.size();
q.front();
q.back();


//-----操作---
q.push(x);             //入队
q.pop(x);              //出队

四、列表list(序列容器、线性表)

      列表是序列容器,是一个相同特征的数据元素的有限序列,可以在任意位置插入删除。

//-----定义--
list<数据类型>列表名字;
eg:list<int> l;


//-----返回值----
l.begin();
l.end();
l.empty();


l.front();
l.back();

l.push_front();
l.pop_front();
l.push_back();
l.pop_back();
l.insert(pos,n,x)      //从pos处插入n个x元素值
l.clear();

l.remove(x);                //删除列表中的X值
l.unique();                  //删除列表重复值
l.reverse();                  //翻转列表
l.sort();

五、set

      set 是关联容器,用于快速存取唯一的关键字。插入重复值,就会忽略这个值。

六、map

      map是关联容器,又叫关联数组,用于快速存取唯一的关键字和关联值,也就是哈希表。
看完就懂的使用案例:剑指offer 03.数组中的重复数字

七、算法:

sort();                //排序

find();                //返回第一个满足()内条件的下标,或者没找到
find_if();             //返回 第一个满足()内条件的下标
binary_searrch();      //是否存在某个值
swap( , );             //交换两个数、数组......
merge();               //合并数组(要求排序)
unique();              //降重(要求排序)
make_heap();            //创建堆排序
sort_heap();
push_heap();
pop_heap();
*max_element();
*min_element();

      未完待续…

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

甜橙の学习笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值