STL标准库体系结构内核分析
泛型编程:generic programming使用模板template为主要工具来编程
1. SL与STL
SL:标准库,以header files形式呈现。
1. C++的SL,header files不带副档名(.h),如#include<vector>
2. 新式C的header files不带副档名.h,如#include<cstdio>
3. 旧式C的header files副档名.h仍可以用,如#include<stdio.h>
补充:
Namespace:可以封装自己的类、函数,从而不与别人的发生混淆。旧式的头文件不被封装在命名空间中。
Std::vector
Using namespace std;//全部打开
Using std::vector ;//打开部分
STL:标准模板库,6大部件
容量上:SL > STL
六大部件:containers ,allocators , lgorithms , iterators , adapters , functors
2. C++11中的range-basedfor statement
For(dec1 : coll ) {statement}
For(int(auto) i:{1, 4 ,6 ,8,34,45}) {……}
For(auto elem :vec ){cout<<elem;}
For(auto& elem :vec ) {elem*=3;}使用引用时,才会改变原始容器中的数值
Auto
第一种写法:
List<string> c;
List<string>::iterator ite;
Ite= ::find(c.begin(),c.end(),target);
第二种写法:(但是ite的定义一定要在容器vector定义之后。这种用法要适度)
List<string> c;
Auto ite = :: find(c.begin(),c.end(),target);
3. container
结构分类:序列式,关联式(快速查找),不定序(Hash-table)
序列式
array(不能扩充)、vector(后端可扩充)、deque(两端都可扩充)、list(可双向查找)、forward-list(单向链表)
关联式(大量查找)
Set(key=value,放的元素不可以重复)、Map(key、value)、Multiset(放的元素可以重复)、multimap(放的元素可以重复)
不定序:篮子里面有链表,但不能过长,会影响查找速度
注意:::find()为algorithms中提供的全局函数,而bsearch ()为vector中自带的搜索,但是一般会先排序,再进行二分法的搜索,所以时间大部分都用在了sort上,所以::find会比c.sort更加快速。对于stack、queue,不提供iterator的操作,只能使用全局的::find()进行搜索。
网友评论