美文网首页
【通俗易懂-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实用技术专题

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