本文预览:
- 标准库和STL
- STL的六大组件
- STL容器分类
- STL容器使用
标准库和STL
** 我们在写C++程序的时候离不开标准库,有人说标准库在哪里?我没有看到啊,其实标准库在你安装编译器的时候就已经存放在你的电脑里了,不管是VC还是GNU还是Clang,他们几乎都是携带了一样的标准库,我们在include<string>的时候,string是谁提供的呢?我们看一下标准库到底有哪些东西:**
标准库包含哪些东西我们可能总习惯提到STL,而常常忽略标准库,大概是STL使用的太多了吧,STL大概占据了标准库的80%内容,但是我们也不能忽略了我们在C++里依然可以使用的C函数,这个不是STL的部分,却是标准库的部分,标准库的内容都封装在std域名内。
标准库非常庞大,很多东西记不住可以方便的查找,这三个网站算是比较权威的:
cplusplus
cppreference
gcc
STL的六大组件
STL是标准库里面使用最多的了,因为STL提供了数据结构和算法,写程序离不开数据结构和算法,看看STL的六大组件:
STL六大组件他们之间不是相互孤立的,从容器开始说起,既然是容器,那么装东西就需要分配内存空间,Allocator内嵌容器,帮助容器管理空间;算法要做到通用,相对来说比较独立,但是巧妇难为无米炊,算法想要做饭,得去容器取米,但是怎么取呢,这个就得使用迭代器,迭代器简单理解就是指针,每一种容器都有其对应的迭代器;仿函数和适配器这两个用到的比较少了。
关于迭代器的注意事项:end()返回并不是指向最后一个元素的迭代器,而是它的下一个
end()的指向STL容器分类
容器分类,这个没有什么好争议的,数据结构有几种类型,那么STL也不能创造出来其他的新型结构了,所以,在大学学好数据结构这门课有多重要,处处都是数据结构啊。需要说明的是,STL实现的数据结构,在效率上必然没有什么可争议的。当然,学会使用只是一个初级阶段,更重要的是,容器内部是什么数据结构,这个我们要了然于胸,要知道什么情况下使用什么容器,是使用线性容器,还是关联容器还是hash表;以及他们各自的优缺点。
STL容器的分类总结一下,大概的分类:
- 线性容器
- Array (把数组分装成了类,固定大小,分配后不可动态增加)
- Vector (动态增长内存,其策略是内存不够的时候整体扩容和迁移)
- Deque (指针物理上连续,buffer动态分配,需要重载++操作符实现逻辑上连续)
- List (双向链表,节点在物理空间不连续,逻辑上通过指针连续)
- 关联容器
- set/multiset (红黑树)
- map/multimap (红黑树,插入删除操作比较耗时,查找快)
- 无序容器 (C++11 新增加的内容, set和map的hash实现)
STL容器使用
简单的使用在cppreference内都有示例可以查看,代码可以直接在网页上编译运行,十分方便。
网友评论