STL的一些常见容器与算法

最近学习了黑马程序员的的STL课程,感觉讲的比较基础,适合入门,现总结一下

一、七个常见的容器

1、vector

2、string

3、deque

4、stack

5、List

6、set / multiset

7、map / multimap

其中map与set容器不允许有重复数据

二、基本操作

这几大容器用到的操作基本上差不多,如

1、push_back(),尾插 ; push_front(),头插

2、pop_back,尾删 ; pop_front(),尾插

3、insert(),插入

4、erase(),删除

5、clear(),清空

6、capacity(),获取容器容量

7、size(),获取容器大小

8、swap()交换两容器

9、[],利用[]进行数据存储,只限于随机访存容器 ; at(),利用at()进行数据存取,只限于随机访存类型的容器

10、find(),查找并返回迭代器

11、reverse(),容器逆置

12、begin(),第一个成员的迭代器;end(),最后一个成员的迭代器

13、assign(),容器赋值的常用操作

14、empty(),判断容器是否为空

15、resize(),重新指定容器大小

16、count(),统计value出现的次数

三、根据map,我们又学了 pair<,>对组

我们在使用map容器的Insert操作时,会返回pair<iterator,bool>对组,根据第二个参数我们可以判断是否存在重复数据,如果存在,则插入失败.

 

四、set与map容器创建的时候默认顺序是升序,我我们可以在添加数据前改变他们的排序顺序

利用仿函数,如:

class comparePerson { public: bool operator()(const Person&p1,const Person&p2) //指定为降序// { return p1.m_Age > p2.m_Age; } }; void SortMy() {//指定排序顺序//利用仿函数// set<Person,comparePerson>s; Person p1("刘备",24); Person p2("关羽",28); Person p3("张飞",25); Person p4("赵云",21); s.insert(p1); s.insert(p2); s.insert(p3); s.insert(p4); for(auto it= s.begin(); it != s.end();it++) { cout<<"姓名: "<<it->m_Name<<" 年龄:"<<it->m_Age<<endl; } }

五、谓词

1、一元谓词  operator 接受一个参数,就叫做一元谓词

2、二元谓词   operator 接受二个参数,就叫做二元谓词

六、内建函数对象

使用STL自己内部的访函数

有以下等:

1、equal_to //等于
2、not_equal_to //不等于/
3、greater //大于//
4、greater_equal//大于等于
5、less/ /小于
6、less_equal //小于等于//

//逻辑仿函数//
1、logical_and //逻辑与
2、logical_or //逻辑或
3、logical_not //逻辑非

#include <functional> //内建函数的使用需要加这个头文件//

 

七、STL常用算法

1、for_each        //用于容器的遍历  

2、transform      //用于容器的搬运

3、find         //用于查找指定元素并返回迭代器

4、find_if        //按值查找元素,找到返回指定位置迭代器,找不到返回结束迭代器位置,比find更灵活

5、adjacent_find     // 查找相邻重复的元素

6、binary_search    //二分查找指定元素,因此需要容器里的元素有序

7、count        //统计元素出现的次数

8、count_if

9、sort         //排序,可以使用仿函数或回调函数更改其排序顺序

10、random_shuffle    //洗牌,打乱顺序,顺序依赖于随即数种子

11、merge        //合并两个容器的函数,将两个有序的容器合并成一个有序的容器

12、reverse        //反转容器内的元素

13、copy        //将容器内指定范围的元素拷贝到另一容器中

14、replace        //将容器内指定范围的 元素替换为新元素

15、replace_if

16、swap        //交换容器的元素

17、accumulate      //小型算法 计算区间内元素的累计和//  需要包含#include <numeric>头文件//

18、fill          //填充指定区间的元素  //需要包含#include <numeric>头文件//

19、set_intersection    //求两个容器的交集//要求这两个容器是有序的//

20、set_union       //求两容器的并集//要求两容器有序//

21、set_difference()    //求俩容器的差集//要求有序//

#include <algorithm>    //不要忘记加这个头文件//

八、课程中还提到了匿名变量,匿名函数,swap收缩内存等等,我会在其他文章中进行讨论

 


__EOF__

本文作者_TLSN
本文链接https://www.cnblogs.com/lordtianqiyi/articles/15790289.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   TLSN  阅读(129)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示