C++标准库结构与使用


本文预览:

  • 标准库和STL
  • STL的六大组件
  • STL容器分类
  • STL容器使用

标准库和STL


** 我们在写C++程序的时候离不开标准库,有人说标准库在哪里?我没有看到啊,其实标准库在你安装编译器的时候就已经存放在你的电脑里了,不管是VC还是GNU还是Clang,他们几乎都是携带了一样的标准库,我们在include的时候,string是谁提供的呢?我们看一下标准库到底有哪些东西:**

C++标准库结构与使用_第1张图片
标准库包含哪些东西

我们可能总习惯提到STL,而常常忽略标准库,大概是STL使用的太多了吧,STL大概占据了标准库的80%内容,但是我们也不能忽略了我们在C++里依然可以使用的C函数,这个不是STL的部分,却是标准库的部分,标准库的内容都封装在std域名内。
标准库非常庞大,很多东西记不住可以方便的查找,这三个网站算是比较权威的:
cplusplus
cppreference
gcc

STL的六大组件


STL是标准库里面使用最多的了,因为STL提供了数据结构和算法,写程序离不开数据结构和算法,看看STL的六大组件:

C++标准库结构与使用_第2张图片
STL

六大组件他们之间不是相互孤立的,从容器开始说起,既然是容器,那么装东西就需要分配内存空间,Allocator内嵌容器,帮助容器管理空间;算法要做到通用,相对来说比较独立,但是巧妇难为无米炊,算法想要做饭,得去容器取米,但是怎么取呢,这个就得使用迭代器,迭代器简单理解就是指针,每一种容器都有其对应的迭代器;仿函数和适配器这两个用到的比较少了。

关于迭代器的注意事项:end()返回并不是指向最后一个元素的迭代器,而是它的下一个

C++标准库结构与使用_第3张图片
end()的指向

STL容器分类


容器分类,这个没有什么好争议的,数据结构有几种类型,那么STL也不能创造出来其他的新型结构了,所以,在大学学好数据结构这门课有多重要,处处都是数据结构啊。需要说明的是,STL实现的数据结构,在效率上必然没有什么可争议的。当然,学会使用只是一个初级阶段,更重要的是,容器内部是什么数据结构,这个我们要了然于胸,要知道什么情况下使用什么容器,是使用线性容器,还是关联容器还是hash表;以及他们各自的优缺点。

C++标准库结构与使用_第4张图片
STL容器的分类

总结一下,大概的分类:

  • 线性容器
  • Array (把数组分装成了类,固定大小,分配后不可动态增加)
  • Vector (动态增长内存,其策略是内存不够的时候整体扩容和迁移)
  • Deque (指针物理上连续,buffer动态分配,需要重载++操作符实现逻辑上连续)
  • List (双向链表,节点在物理空间不连续,逻辑上通过指针连续)
  • 关联容器
  • set/multiset (红黑树)
  • map/multimap (红黑树,插入删除操作比较耗时,查找快)
  • 无序容器 (C++11 新增加的内容, set和map的hash实现)

STL容器使用


简单的使用在cppreference内都有示例可以查看,代码可以直接在网页上编译运行,十分方便。

你可能感兴趣的:(C++标准库结构与使用)