美文网首页
【通俗易懂-C++ STL模板库】STL实用技术专题

【通俗易懂-C++ STL模板库】STL实用技术专题

作者: 编程小兔崽 | 来源:发表于2018-10-19 16:03 被阅读23次

STL( 标准模板库 )理论基础

1基本概念

STL (Standard Template Library,标准模板库 )是惠普实验室开发的一系列软件的统称。 现然主要出现在C++中,但在被引入 C++之前该技术就已经存在了很长的一段时间。 

STL的从广义上讲分为 三类:

algorithm (算法)、container(容器)和 iterator (迭代器),容器和算法 通过迭代器可以进行无缝地连接。

几乎所有的代码都采用了模板类和模板函数的方式,这相比于传统的由 函数和类组成的库来说提供了更好的代码重用机会。在 C++标准中, STL 被组织为下面的 13 个头文件:

、、 、 、、、、、、、、和 

STL详细的说六大组件 :

容器( Container)、算法( Algorithm )、迭代器( Iterator ) 、仿函数( Function object )、 适配器( Adaptor)、空间配制器( allocator)。

使用 STL的好处

(1)STL是 C++的一部分,因此不用额外安装什么,它被内建在你的编译器之内。

( 2)STL的一个重要特点是数据结构和算法的分离 。尽管这是个简单的概念, 但是这种分离确实使得 STL 变得非常通用。 例如,在 STL的 vector 容器中,可以放入元素、基础数据类型变量、元素的地址;STL的 sort()函数可以用来操作 vector,list 等容器。

(3) 程序员可以不用思考 STL具体的实现过程,只要能够熟练使用 STL就 OK 了。这样他们就可以把 精力放在程序开发的别的方面。

( 4) STL具有高可重用性,高性能,高移植性,跨平台的优点。

 高可重用性: STL 中几乎所有的代码都采用了模板类和模版函数的方式实现,这相 比于传统的由函数和类组成的库来说提供了更好的代码重用机会。

高性能:如 map 可以高效地从十万条记录里面查找出指定的记录,因为 map 是采 用红黑树的变体实现的。 (红黑树是平横二叉树的一种 )

高移植性:如在项目 A 上用 STL编写的模块,可以直接移植到项目 B上。 跨平台:如用 windows 的 Visual Studio 编写的代码可以在 Mac OS的 XCode上直接 编译。

(5) 程序员可以不用思考 STL具体的实现过程,只要能够熟练使用 STL就 OK 了。这样 他们就可以把精力放在程序开发的别的方面。

( 6) 了解到 STL的这些好处,我们知道 STL无疑是最值得 C++程序员骄傲的一部分。每 一个 C++程序员都应该好好学习 STL。只有能够熟练使用 STL的程序员, 才是好的 C++程序员。

( 7) 总之:经常遇到 C++程序员对 STL不是非常了解。大多是有一个大致的映像,而对 于在什么情况下应该使用哪个容器和算法都感到比较茫然。 STL是 C++程序员的一项不可或缺的 基本技能 ,掌握它对提升 C++编程大有裨益。

如果问学习C++ STL需要学习那些内容,我个人觉得以下内容是值得掌握的,因为在项目中经常用到,所以今天跟大家分享一下。

STL概论

六大组件:   容器、算法、迭代器、仿函数、适配器(配接器)、空间配置器

容器Container

序列式容器

关联式容器 有个key起到索引作用

算法algorithm

质变算法

非质变算法

迭代器iterator

双向

随机访问 (功能最强 ,可以支持跳跃式的访问)

优点

不需要安装东西,直接使用

高复用性、高移植、高性能

数据和算法分离,利用迭代器进行沟通

程序员可以不用思考 STL 具体的实现过程,只要能够熟练使用 STL 就OK 了。这样他们就可以把精力放在程序开发的别的方面

容器算法迭代器初识

vector<类型> v 容器

插v.push_back()

起始迭代器v.begin() 指向容器中第一个元素

结束迭代器v.end() 指向容器中最后一个元素下一个位置

for_each遍历 引入头文件algorithm

string容器

构造、赋值

字符存取[] at 区别

at 访问越界 抛出 out_of_range异常

[] 直接挂掉

拼接、查找、替换

 +=  append 拼接

  查找 find 查不到 返回 -1   rfind 从右往左查

替换 replace

比较 compare

项目= 1 字符串1 大> 0字符串1 小 <0

子串

string substr(int pos = 0, intn = npos) const;//返回由pos开始的n个字符组成的字符串

插入insert

删除erase

char * 和 string 转换

char * 转string 调用string有参构造string str( “char *”)

  string 转 char*   .c_str() const char *

 编译器可以将char * 隐式类型转换为string,反之不可以

写转大写 和 大写转小写

转大写 toupper

转小写 tolower

vector容器

与数组类型,但是是动态数组

动态分配内存并不是原有空间下分配,而是找一个新空间,将原有数据拷贝到新空间下,然后释放掉原有空间

  构造、赋值

 交换swap

size 容器的大小

  capacity 容器的容量

empty 容器是否为空

 resize 重新指定容器长度

如果比原来长了,默认用0填充,可以用第二个参数代替默认值

 如果比原来短了,超出的部分元素就被删除掉了

reserve 预留空间,但是不初始化

  at、[] 对元素存取,at越界抛出异常 ,[]直接挂掉

  第一个元素 front

 最后一个元素 back

 插入insert(迭代器)

删除erase(迭代器 )

清空clear

尾插push_back

尾删pop_back

巧用swap来收缩内存

巧用reserve预留空间

逆序遍历 迭代器reverse_iterator

如果判断一个容器的迭代器是否支持随机访问

deque容器

双端数组 没有容量 内部用中控器控制连续分段空间

可以对头部进行插入删除

和vector的测试接口差不多

不同 头部插入push_front 头部 删除 pop_front

我个人觉得  多  是C++的精华,STL是C++的高级。如果没有学习STL相当于只掌握C++的一半内容。

所以个人觉得如果走C++方向,STL非常重要要。

每天进步一点点,开开心心过好每一天

如果觉得有用点个赞支持一下!

相关文章

  • 【通俗易懂-C++ STL模板库】STL实用技术专题

    STL( 标准模板库 )理论基础 1基本概念 STL (Standard Template Library,标准模...

  • C++入门系列博客五 C++ STL

    C++ 标准模板库(STL) 作者:AceTan,转载请标明出处! 0x00 何为STL## STL(Standa...

  • STL之参考文献

    C++标准库是离不开模板的,STL占了C++标准库80%以上。 学习STL(c++ 98)的主要参考: gcc 3...

  • c++ STL

    一.STL: standard template library(C++标准模板库) STL共有六大组件:容器、算...

  • C++基础一文通(六)STL

    一. STL 标准模板库 STL(Standard Template Library,标准模板库) STL 从广义...

  • 12.STL之vector

    STL 从本节,我们将介绍C++的STL(Standard Template Library)也就是标准模板库,顾...

  • 算法笔记 晴神(胡凡等著) 完整pdf下载

    C/C++快速入门、入门模拟、算法初步、数学问题、C++标准模板库(STL)、数据结构专题(二章)、搜索专题、图算...

  • C++ STL(1)

    C++ STL(1) from my csdn blog C++标准模板库 容器C++标准模板库提供了10种容器基...

  • C++ STL

    STL STL 是“Standard Template Library”的缩写,中文译为“标准模板库”。STL 是...

  • 读书笔记17.06.03

    C++ STL:Listlist是C++标准模版库(STL,Standard Template Library)中...

网友评论

      本文标题:【通俗易懂-C++ STL模板库】STL实用技术专题

      本文链接:https://www.haomeiwen.com/subject/bcxuzftx.html