STL总结

1 篇文章 0 订阅

STL的积累

在近几天的STL学习中,学到了一些容器的使用,相比于以前用循环、用数组等解决问题,还是STL来得更干脆些。容器和算法通过迭代器可以很干脆利落地将一些操作解决掉。
容器
vector:类似于动态数组,支持存取,更好的一个方面是,如果遇到空间不足,可以自动追加空间;
map/multimap:这个是做映射地,在操作类查找方面有很大的帮助,能很大的解决了查找时间的问题(pair可以生成键值对)键(i->frist)值(i->second);
set/multiset:集合,快速查找时可使用,set与map很相似,没有关键字,不可进行下标操作;
算法
算法中常用到的两个参数是一对迭代器[frist,las),用来表示容器的范围。
sort是用来排序地一个算法;
二分查找使用之前必须前对容器进行排序,每次查找都是随机的。
count: 利用等于操作符,把标志范围内的元素与输入值比较,返回相等元素个数。
count_if: 利用输入的操作符,对标志范围内的元素进行操作,返回结果为true的个数。
find: 利用底层元素的等于操作符,对指定范围内的元素与输入值进行比较。当匹配时,结束搜索,返回该元素的一个iterator。
find_end: 在指定范围内查找"由输入的另外一对iterator标志的第二个序列"的最后一次出现。找到则返回最后一对的第一个iterator,否则返回输入的"另外一对"的第一个iterator。重载使用用户输入的操作符代替等于操作。
find_first_of: 在指定范围内查找"由输入的另外一对iterator标志的第二个序列"中任意一个元素的第一次出现。也可以自拟定操作符。
find_if: 使用输入的函数代替等于操作符执行find。
lower_bound: 返回一个ForwardIterator,指向在有序序列范围内的可以插入指定值而不破坏容器顺序的第一个位置。重载函数使用自定义比较操作。
upper_bound: 返回一个ForwardIterator,指向在有序序列范围内插入value而不破坏容器顺序的最后一个位置,该位置标志一个大于value的值。重载函数使用自定义比较操作。
集合算法:
set_union: 构造一个有序序列,包含两个序列中所有的不重复元素。重载版本使用自定义的比较操作。set_intersection: 构造一个有序序列,其中元素在两个序列中都存在。重载版本使用自定义的比较操作。set_difference: 构造一个有序序列,该序列仅保留第一个序列中存在的而第二个中不存在的元素。重载版本使用自定义的比较操作。set_symmetric_difference: 构造一个有序序列,该序列取两个序列的对称差集(并集-交集)。

做图书管理后台的反思

普通查找

构造map映射来查找,这及解决了查找时间问题,又缓解了将借阅记录存放在resder,与book里各一份地问题,减少了空间地使用,但是在删除操作中,必须将map清空后重新构建。

pair< multimap<string,int>::iterator,multimap<string,int>::iterator> range;
range=sno_record.equal_range(sno);

普通查找采用了构造迭代器区间,在容器中寻找等于符合条件地要求,因此普通查找对输入地内容要求非常高,要想更有利于使用者,这时又添加了模糊查找。

模糊查找

在模糊查找中用到了find_if(),这个可以自定义筛选函数,有时会用到筛选类,这里的我还用到了的时判断字符串的子串
在判断子串中我使用了

string::size_tupe i=str1.find(str)
if(i!=string::npos) return true;
else return false;

区间查找

主要是采用了lower_bound和upper_bound

组合查找

这里采用了集合multiset中的一些操作

总结感想

在这次的学习STL以及实践的过程中,我看到了C++中更广阔的世界,同时也看到了自己欠缺的是那么的多,然而在此次实验,也有很多处明明理解,却无法将其实现,我也翻阅了很多,最后回顾老师讲过的东西,很容易的就可以解决,我只顾着往前走,就忘记回顾,我不能一错再错,还要多多练习,强化一下自己。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值