stl的学习
原创
©著作权归作者所有:来自51CTO博客作者llliang11的原创作品,请联系作者获取转载授权,否则将追究法律责任
stl是c++的标准模板库,其应用是快速的构建程序以及高效的重用代码,并且移植性非常好。
stl包含三部分内容:容器,迭代器,算法。
迭代器是stl的核心,它连接了容器与算法,使得整个stl的体系得以强壮。
首先讲述容器,容器包含了
顺序容器:<vector>,<deque>,<list>
关联容器:<map>,<set>,<multimap>,<multiset>
容器适配器:<queue>,<stack>,<priority_queue>
所有容器的基本操作都是基于插入值,删除值,遍历值而展开的,其实这三个基本操作也是整个数据结构,算法当中最基本的三个操作。
在容器的插入值的算法中主要是提供了c<type> insert(value),在基本的插入算法下顺序容器还拥有push_back(value),push_front(value)插入算法。
删除值算法主要是提供了c<type> erase(value),在基本的删除值算法下,顺序容器还拥有pop_back(value),pop_front()算法。
遍历值主要是通过迭代器进行(迭代器实际上就是指向数据的指针)。
在容器适配器中,所有的操作主要是依靠调用容器的操作进行,看似堆栈,队列的操作实际上是调用了容器的基本算法。
在容器操作中需要注意的是(1)每当删除了值以后,那么迭代器会失效,这样程序是无法进行的。(2)容器都有自己的数据类型,不能用常用的int,long之类的来定义。(3)在运用容器中,注意容器的选用,vector,deque的数据结构基于线性表,而list的数据结构基于链表,所以当操作需要更多的随机访问时做好选用vector,deque,而当需要更多的是插入与删除那么最好选用list容器。
接下来介绍迭代器
迭代器对于操作集,可分为(1)插入迭代器,(2)流迭代器,(3)反向迭代器,(4)const迭代器。
算法之所以不直接删除和添加元素,主要是提供插入迭代器完成的。而流迭代器主要是提供输入输出的方便。之所以有反向迭代器,主要是因为在算法中都是用迭代器自加完成的,而有些功能比如说要逆序访问时,那么反向迭代器的自加正好可以用。当容器是是const类型时,注意写入算法是不能调用的,而不管本身容器到底提供了哪些容器。还要注意的是算法对一对迭代器的类型必须要相同,不能一个是const而另一个却不是const。
迭代器对于算法可以分为,输入迭代器,输出迭代器,前向迭代器,双向迭代器,随机访问迭代器。
以下是各种迭代器所支持的操作:
输入迭代器:读,不能写 == != ++ * -> 支持的算法:find...istream_iterator是输入迭代器。
输出迭代器:写,不能读 ++ * 支持的算法:copy...ostream_iterator是输出迭代器。
前向迭代器:读和写 同时拥有输入迭代器和输出迭代器的算法 支持的算法:replace...
双向迭代器: 读和写 拥有前向迭代器的算法和-- 支持的算法:reverse...
随机访问迭代器:读和写 完整的迭代器算术运算 支持的算法:sort...
最重要的是要知道算法到底对什么样的迭代器才是有效的。
算法主要是包括3类,读算法,写算法,排序算法。
上一篇:request与response
下一篇:网站记录
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
STL常用泛型算法
STL常用泛型算法
STL 泛型算法 C++函数对象 STL常用算法接口 -
STL容器学习
标准库中的容器分为顺序容器和关联容器。顺序
迭代器 删除元素 顺序容器 -
STL学习总结
总结STL中vector,set,multiset,map,multimap,deque,stack,list,queue,gt...
vector set map queue list -
STL之partition学习
顺便存一下numeric函数的使用方法吧,感觉用处不大。
i++ c++ #include javascript c函数 -
STL部分学习总结
一、map/multimapmap/mult...
迭代器 数据 #include 成员函数 键值 -
STL学习心得
STL的知识翻来复去,也就那么回事,但是真的...
数组 二分查找 数组元素 参数说明 二分法