C++ STL详解(一)初识STL

1 篇文章 0 订阅
1 篇文章 0 订阅

前言

呃……由于昨天写的那篇文章太lan了,于是!我把它删了。

啊,不要在意这些细节,今天我决定,重新写一篇文章,和大家好好扯一扯C++中的STL。

简介

标准模板库(Standard Template Library,STL),是C++中添加的一个巨型模板库,其中有许多的功能、函数、容器被加入,使得像我这种C++党的人们写代码变得更加方便。(啊,python党和Java党的就别看了啊,直接关掉吧。)

STL一般分为六个部分:容器,函数,迭代器,仿函数,其余两个我就不细说了,因为不常用。

容器

STL中的容器一般分为这些:

  • 常用容器:string(这个不完全算容器),vector
  • 队列型容器:stack,queue,deque
  • 特殊数据结构型容器:priority_ueue(堆),map(红黑树),unordered_map(哈希表),list(链表)
  • 其他容器:pair,set,unordered_set
  • 不常用容器:array,tuple

后面我会一一介绍这些容器,今天来简介一下吧。

string:字符串类型,代替了字符数组,内置功能强大,STL基础容器之一。

vector:动态数组,使用简单,内置功能多,有些场景下可代替数组。

stack:栈,是一种先进后出(First In Last Out,FILO)型容器,在程序递归时被编译器使用,可辅助深度优先搜索。

queue:队列,是一种先进先出(First In First Out,FIFO)型容器,可辅助广度优先搜索,用途比较广泛。

deque:双端队列,可在队列两端操作,和list相近,但构造不同。

priority_queue:优先队列,插入时自动排序,可设置排序方式,内部由堆实现。

map:映射,类似python中的字典,有键和值两个参数,插入时自动去重并排序,内部有红黑树实现。

unorded_map:特殊映射,插入时不排序但去重,与map类似,内部由哈希表实现。

list:双向链表,和deque相似,可对两端进行操作。

pair:是一个二元组,内部为一个结构体,可代替struct定义的二元组。

set:集合,插入时自动去重并排序,有些时候可简化一些需要多次排序的情况。

unordered_set:集合,插入时自动去重但不排序,在特殊的情况时可替换set。

array:数组,和vector相似,其他不解释。

tuple:元组,和python中的元组类似,由于不常用,所以不多解释。

常用函数

sort(first,last,comp);              //排序,内部为快速排序
next_permutation(first,last);       //全排列,内部为dfs
binary_search(array,target);        //二分查找
*max_element(arr1,arr2,comp);       //数组比较最大值
*min_element(arr1,arr2,comp);       //数组比较最小值
swap(a,b);                          //交换a,b的值
reverse(arr);                       //反转容器
max(a,b);                           //取a,b的最大值
min(a,b);                           //取a,b的最小值
unique(arr);                        //将数组arr伪去重,将重复的值放在数组后面

我总结了最常用的函数,其他没写出来。

仿函数

greater<int>();              //大于
less<int>();                 //小于
equal_to<int>();             //等于
not_equal_to<int>();         //不等于
greater_equal_to<int>();     //大于等于
less_equal_to<int>();        //小于等于

仿函数一般用于sort排序中__comp参数中代替自己写cmp函数用的,其他……用处不大。

结语

呃……迭代器没有具体的用法和功能,它是一个大的概括,所以我就不再具体介绍了。

今天就到这里,我们下期见!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值