STL:
vector容器的构造函数:
vector():创建一个空vector
vector(int nSize):创建一个vector,元素个数为nSize
vector(int nSize,const t& t):创建一个vector,元素个数为nSize,且值均为t
vector(const vector&):复制构造函数
vector(begin,end):复制[begin,end)区间内另一个数组的元素到vector中
map/multimap:可以做映射,对于操作类有很大帮助,,pair可以生成键值对。
vector:类似于动态数组,支持存取,更好的一个方面是,如果遇到空间不足,可以自动追加空间;
set/multiset:集合,快速查找时可使用,set与map很相似,没有关键字,不可进行下标操作;
算法
算法中常用到的两个参数是一对迭代器[frist,las),用来表示容器的范围。
sort是用来排序地一个算法;
find: 利用底层元素的等于操作符,对指定范围内的元素与输入值进行比较。当匹配时,结束搜索,返回该元素的一个iterator。
find_end: 在指定范围内查找"由输入的另外一对iterator标志的第二个序列"的最后一次出现。找到则返回最后一对的第一个iterator,否则返回输入的"另外一对"的第一个iterator。重载使用用户输入的操作符代替等于操作。
find_first_of: 在指定范围内查找"由输入的另外一对iterator标志的第二个序列"中任意一个元素的第一次出现。也可以自拟定操作符。
二分查找使用之前必须前对容器进行排序,每次查找都是随机的。
count: 利用等于操作符,把标志范围内的元素与输入值比较,返回相等元素个数。
count_if: 利用输入的操作符,对标志范围内的元素进行操作,返回结果为true的个数。
函数调用:
- push_back() 在数组的最后添加一个数据
- pop_back() 去掉数组的最后一个数据
- at() 得到编号位置的数据
- begin() 得到数组头的指针
- end() 得到数组的最后一个单元+1的指针
6.front() 得到数组头的引用 - back() 得到数组的最后一个单元的引用
- max_size() 得到vector最大可以是多大
- capacity() 当前vector分配的大小
10.size() 当前使用数据的大小
11.resize() 改变当前使用数据的大小,如果它比当前使用的大,者填充默认值
set_union: 构造一个有序序列,包含两个序列中所有的不重复元素。重载版本使用自定义的比较操作。set_intersection: 构造一个有序序列,其中元素在两个序列中都存在。重载版本使用自定义的比较操作。set_difference: 构造一个有序序列,该序列仅保留第一个序列中存在的而第二个中不存在的元素。重载版本使用自定义的比较操作。set_symmetric_difference: 构造一个有序序列,该序列取两个序列的对称差集(并集-交集)。
使用时注意包含头文件 std::set and std::multiset associative containers
set容器常用操作
s.begin() 返回set容器的第一个元素
s.end() 返回set容器的最后一个元素
s.clear() 删除set容器中的所有的元素
s.empty() 判断set容器是否为空
s.insert() 插入一个元素
s.erase() 删除一个元素
s.size() 返回当前set容器中的元素个数
普通查找:构造map映射来查找,这及解决了查找时间问题,又缓解了将借阅记录存放在resder,与book里各一份地问题,减少了空间地使用,但是在删除操作中,必须将map清空后重新构建。
pair< multimap<string,int>::iterator,multimap<string,int>::iterator> range;
range=sno_record.equal_range(sno);1
模糊查找:在模糊查找中用到了find_if(),这个可以自定义筛选函数,有时会用到筛选类,这里的我还用到了的时判断字符串的子串
体会:
在学习STL以及实践的过程中,理解到学好c++是真的不容易,也了解到自己欠缺的东西,然而在这次实验,也有很多知识点明明理解,但操作时候却实现的相当困难,查阅了一些资料,最后回顾老师讲过的东西,到头来发现其实这些问题也没有想象中那么的难,有时候听了新的知识,就没有及时巩固以前的,再写代码时候还是用不上,效率太低,以后还要多强化自己。