博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
STL容器及泛型算法
阅读量:6359 次
发布时间:2019-06-23

本文共 3381 字,大约阅读时间需要 11 分钟。

一、顺序容器

1.容器的选择

(1) 随机访问,选vector ,deque

(2) 在中间插入或者删除元素,选list

(3) 在头尾插入或删除元素 , 选deque

 

2.list的成员函数

(1)lst.sort()

(2)lst.unique()   // 会把list中相邻重复的元素删除,而unique算法只是使不重复的元素出现在序列的开始部分

 

3.迭代器的分类

 

 

4.迭代器能力排行 : 输入输出迭代器 < 前向迭代器 < 双向迭代器 < 随机访问迭代器

  (输入输出迭代器只能用于单遍扫描算法)

   因为流迭代器不能递减,所以流迭代器由于不能反向遍历,不能创建反向迭代器.

   注意: 只有随机访问迭代器才能有+,-,> ,  <等操作,其他迭代器只能递增或者递减或者 !=,不能用大于>小于<比较 

   

5.各容器的迭代器类型

   双向迭代器: list

   随机访问迭代器:array,deque,vector,string 

 

6.算法要求的(能力最低的)迭代器类型:

(1)输入迭代器: find, accumulate, copy的前两个参数

(2)输出迭代器: copy的第三个参数

(3)前向迭代器: replace, unique

(4)双向迭代器: reverse

(5)随机迭代器: sort

 

7.逆向迭代器r总是在对应正向迭代器的前一个位置,

   所以当r转换为正向迭代器时,r.base()总是在r的右边一个位置。

 

8.算法函数总结: (算法都不能改变容器大小,要想用算法在容器中插入元素,必须使用插入迭代器!)

 

(1)  swap( c1, c2 )                //容器c1和c2的类型和它们的元素类型都必须相同,若c1,c2分别为两个相同类类型的对象,则swap会交换着两个对象的所有非staitic成员(2)  max_element( beg, end )     min_element( beg, end )       //找容器中的最值,返回指向该值的迭代器     max( val1, val2 )             //返回val1和val2中的较大者     min( val1, val2 )             //返回val1和val2中的较小者(3)  unique( beg, end )            //只能"消除"相邻重复的值,是不重复的值出现在容器前面,把重复的值放到了容器后面,                                   //返回值为指向最后一个不重复的元素之后的位置的迭代器。(4)  sort( beg, end )                                sort( beg, end, comp )        //让元素按comp提供的排序方式排列,comp函数必须是二元的(即有两个参数) (5)  copy( beg, end, dest )        //dest表示目的迭代器的位置,即拷贝的初始位置(6)  fill( beg, end, val )     fill_n( dest, n, val )(7)  reverse(beg, end)             //将[beg,end)区间的元素反向排列(8)  replace( beg, end, old_val, new_val )(9)  accumulate( beg, end, init )    // init为和的初始值     注意:(I) accumulate算法定义在
头文件中,第三个参数为求和起点 (II) 对string的求和其第三个参数即初始值必须强制类型转换,不能直接用"" vector
v{ "ab", "cd", "ef" }; string s = accumulate(v.begin(), v.end(),(string)""); (10) count( beg, end, val) //返回值为val出现的次数(11) find( beg, end, val) // val表示待查找的值。返回值为指向val的迭代器 注意:不能在string里面找字符串(比如find(s.begin(),s.end(),"abc")),只能找单个字符 但是string 中的成员函数s.find()可以找字符也可以找字符串,返回值为该查找字符或字符串首个字符的下标的数值. 例如: string s = "hello world"; int m = s.find('w'); int n = s.find("wor"); (12) rotate(beg, mid, end) //围绕mid指向的元素进行转动,mid成为首元素,随后是mid+1到end之前的元素,再接着是是beg到mid之前的元素。 vector
v {
1,2,3,4,5,6}; rotate(v.begin(), v.begin()+2, v.end()); for(auto ve: v) cout << ve << ' '; //输出结果为 3 4 5 6 1 2

  

 二丶关联容器相关操作

 

1   //向set中添加元素 2     set
iset{
0,1,2}; 3 iset.insert(5); 4 iset.insert({
5,6,8}); 5 iset.insert(b, e); //添加迭代器区间[b,e)的元素 6 7 //从set中删除元素 8 iset.erase(0); 9 iset.erase(p); //删除迭代器p所指向的元素10 iset.erase(b, e); //删除迭代器区间[b,e)的元素11 12 //向map中添加元素13 map
imap;14 imap.insert({
"张三",15});15 imap.insert({
"张三",16},{
"李四",16}); //错误!不能同时插入多个元素!16 imap.insert(make_pair("张三",15));17 18 //从map中删除元素19 imap.erase("张三"); //删除每个对应关键字的元素,返回删除元素的个数20 imap.erase(p); //删除迭代器p所指向的元素21 imap.erase(b, e) //删除迭代器区间[b,e)的元素22 23 //访问关联容器中的元素24 c.find(k) //返回指向第一个关键字为k的元素的迭代器25 c.count(k) //返回关键字等于k的元素的个数26 27 c.lower_bound(k) //返回一个迭代器,指向第一个关键字不小于k的元素28 c.upper_bound(k) //返回一个迭代器,指向第一个关键字大于k的元素29 30 c.equal_range(k) //返回一个迭代器pair,表示关键字等于k的元素的范围31

 

 

 

 

转载于:https://www.cnblogs.com/FengZeng666/p/9271778.html

你可能感兴趣的文章
访问网络文件共享服务
查看>>
[转载] 七龙珠第一部——第104话 悟空复活吧
查看>>
Goldengate 维护
查看>>
如何验证下载的Microsoft软件是否为正版??
查看>>
Python文件操作
查看>>
用shell实现rpm包的自动安装
查看>>
大型网站技术架构(四)网站的高性能架构
查看>>
BAT资深架构师告诉你从程序员到架构师,你需要掌握什么能力?
查看>>
电脑被格式化了如何恢复?
查看>>
母亲像一道明亮的光
查看>>
js判断数组中是否包含某元素
查看>>
关于tcp/ip三次握手的理解和详细分析
查看>>
office 2010 提示“不信任到visual basic project“问题处理
查看>>
高性能web开发之网络传输环节
查看>>
遍历Map的四种方法
查看>>
https、SSL与数字证书介绍
查看>>
【VMCloud云平台】SCVMM配置(二)创建一片云
查看>>
http://bbs.linuxtone.org/thread-15681-1-1.html
查看>>
TIBCO add user error solution
查看>>
ssh服务的安装与运行
查看>>