C :STL的使用!

前言:STL是c++的利器;

 

目录

 

 

一.STL:基本概念

  1.1STL:基本概念

  1.2c++标准库的组成

二.STL应用:

1STL的string

2序列式容器

2.1Vector容器

2.2stack容器

2.3queue容器

2.4List容器

2.5priority_queue

3关联式容器

3.1set和mult set

3.2map和multmap

4STL实现机制

4.1STL容器对共性机制:

4.2容器的应用场景:

5算法

5.1概念和分类:

5.2算法设计理念:

5.3具体算法介绍


 

 

一.STL:基本概念

  1.1STL:基本概念

algorithm (算法) container(容器:相当于数据结构模型) 和i te rator(迭代器)

a)容器:

序列式容器:各一个元素都有固定的位置;取决于 插入时机和地点;

vector: 单向数组

deque:  双队列;

list: 双向链表;

stack:栈

queue:队列;

priority_queue :优先队列;

关联式容器:元素取决于排序准则,和插入顺序无关;

set (集合)/multiset(多重集合) :

map(映射)/multimap(多重映射):

b)算法:

<alorithm>,<numeric>,<functional>;

1.2c++标准库的组成 :

有10大头文件组成:

1.支持语言相关功能;2支持输入输出流的头文件; 3 诊断相关;4定义工具函数;5字符串;

6 容器;7迭代器; 8算法; 9数值操作 ; 10本地化 ;

模板回顾:函数模板,类模板;

二.STL应用:

1STL的string:

string的概念:

1.string是一个类:string封装了char* ,管理这个字符串,是一个char* 型的容器;

2.string不需要考虑内存的释放和越界:

3.string 提供了一系列的字符串操作函数:find,copy,erase,repalce,inset

4.char * 是一个只向字符的指针:

运算符重载:
1实现一个数组类;

2实现一个字符串类;

3实现智能指针的编写;

 sting的初始化

遍历

字符指针和string的转化

连接

查找和替换

区间删除(截断)

插入

string的翻转和大小写的转化

2序列式容器:

2.1Vector容器:

1vector:容器简介: 将元素置于一个动态数组加以管理的容器;//二维数组1vector<vector<int>> mat(row);vector<vector<int >> mat(row,vecror<int> (col))

vector可以随机存储元素(直接存取;用【】操作符,at方法,迭代器存储)

//尾部插入or删除很方便!

2vector 对象的默认构造,初始化:

vector <T> vect;

vector <>

3vecror复制

4获得元素:尾部添加or弹出元素,获取头部元素,尾部元素;

5遍历:1通过数组方式;2通过迭代器操作

6vector删除:

7vector数据的插入:

 

2.2stack容器

2.3queue容器

2.4List容器

2.5priority_queue

 

3关联式容器

3.1set和mult set

1集合 有序 唯一红黑树变体

2set元素添加 遍历 删除

3能比较大小set的集合 1基本数据类型 2 自定义数据类型的比较 仿函数 函数对象

4set的查找和Pair

3.2map和multmap

1.map元素的添加 遍历和删除的基本操作:

概念:map是一种关联式容器,一个map是一个键值对序列,即(key,value)对; 它提供了key快捷检索能力;

规则:map中key值是唯一的;集合中的元素 按一定的顺序排列;元素插入过程是按规则插入的,不能指定位置插入;

结构:map具体实现红黑树变体的平衡二叉树的数据结构;在插入操作和删除操作比vector快!;

key =1  Y=one

key=2 y=two

multimap和map区别:map支持唯一键值对,每个键值对是唯一的;而multimap相同的键可以出现的多次;

map /multimap采用模板类实现,对象的默认构造形式:

map<T1,T2>mapTT;

multimap<T1,T2> multimap TT;//t1,t2自定义数据类型;

 

2插入的思种方法:

3map的查找: 1find查找 2equal——range 查找

4multimap的案例

4STL实现机制

4.1STL容器对共性机制:

1容器的值copy语意:不能出现深拷贝和浅拷贝问题;

c++模板是容器的概念;

容器 执行插入元素的操作,内部实施拷贝动作,使用STL容器必须能被拷贝;

除了queue和stack以外,每个容器都提供可以返回迭代器的函数,运用返回的迭代器就可以访问元素;

4.2容器的应用场景:

vector:单端数组:可以随机存取;元素搜寻速度慢;安插移除在尾端进行;(效率比deque高)

 

deque:双端数组 :可以随机存取;元素搜寻速度慢;安插移除在头尾端进行;(有点头部插入和移除)

使用场景:比如排队购票系统; 对于排队者存储,可以蚕蛹deque,支持头端的快速移除,尾端的快速添加;

如果采用vector,则头端移除时,移动大量数据;

 

priority_queue :优先队列

 

list:双向链表;不能随机存取;元素搜寻速度非常慢;安插移除在任何位置进行;

使用场景: 公交车乘客的存储,随时有乘客下车; 支持频繁的 不确定位置元素的移除插入;

 

set:二叉树; 不能随机存取;元素搜寻速度快;

使用场景:对于手机游戏的个人得分记录存储;存储要求从高分到低分的顺序排列;

 

map:二叉树:对key而言可以随机存取;对key而言元素搜寻快!

使用场景: 比如按ID号存储10万个用户,想要通过ID查找对应的用户;

 

5算法

5.1概念和分类:

<algorithm> <> <>

1非可变序列算法 :不能直接修改其操作的容器内容的算法

计数算法 count count_if

搜索算法 search , find,find_if find_first_of

比较算法:equal, mismatchh,

 

2可变序列算法:可以修改他们所操作的容器内容的算法

删除算法 :remove ,remove_if,remove_copy

修改算法: for_each ,transform

排序算法:sort,stable_sort,paritial_sort

 

补充:

排序算法 :包括对序列排序和合并算法,搜索算法以及有序列上的集合操作

数值算法: 对容器内容进行数值计算;

 

 

5.2算法设计理念:

函数对象和谓词;

函数对象:重载函数对象的类;(普通函数和函数对象的一同 函数对象做函数参数 函数对象做返回值)

一元函数对象 函数参数是1个;

二元函数对象  函数参数是2个;

一元谓词 函数参数是1个,函数返回值是bool类型的 ,可以作为一个判断式,谓词可以使用一个仿函数,也可以是回调函数

二元谓词 函数参数是2个,函数返回值是bool类型的

 

要判断stl算法 返回的值是迭代器还是谓词(函数对象) 是stl算法入门重点

自定义函数对象,预定义函数对象;

5.3具体算法介绍

1查找算法:13个

2堆算法:3个

3关系算法:8个

4集合算法:4个

5列组合算法:2个

6排序和通用算法:14个

7删除和替换算法:15个

8生产和变异算法:6个

9算数算法:4个

 

但常用算法算法:

1查找算法: count() ,count_if() ,    equal_range(),   find(),find()

2排序算法: sort()  merge(), 

3常用拷贝算法和替换算法:replace(),replace_if(),copy(),swap()

4常用的遍历算法:for_each,treansform()

5常用的算术和生成算法:accumulate()

6常用的集合算法:set_union()

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值