c++的核心优势是便于软件的重用:

1)面向对象的思想:继承和多态、标准类库

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

2)泛型程序设计 (generic programming):模板机制、标准模板库(standard template library, STL)(标准模板库就是一些常用的数据结构和算法模板的集合)

1.STL中的基本概念

容器:用于存放各种类型的数据(基本类型的变量,对象)的数据结构,是类模板

算法:用来操作容器中的元素,是函数模板

迭代器:用于依次存取容器中元素,类似于指针

2.容器

容器分三种

1)顺序容器(vector/deque/list)

vector 头文件<vector>

动态数组,在内存连续存放。随机存取能常数时间完成;尾部增删在大部分情况下是常数时间完成,这是由于动态数组申请内存都是预先申请较大内存,不够了再申请;但如果是插入或删除操作,就需要O(n)

deque 头文件<deque>

双向队列(有头尾指针),在内存连续存放。和vector的差别是两端增删在大部分情况下常数时间完成。

list 头文件<list>

双向链表,在内存不连续存放。在任何位置增删元素都需要修改前后元素的指针指向,即能常数时间完成,但存取一个元素,需要从头指针慢慢挪,即不支持随机存取。

2)关联容器(set/multiset/map/multimap)

所插入的元素需要通过相应排序规则来确定其位置。可用于查找,通常以平衡二叉树方式实现,插入和检索的时间都是O(log(N))。

泛型程序设计 随笔 第1张

3)容器适配器(stack/queue/priority_queue)

priority_queue 头文件<queue>

优先级队列,最高优先级元素总是第一个出列。

注:

1)对象被插入容器时,被插入的实际上是对象的复制品。此外,该对象所述的类还应对 == 和 < 进行重载

2)在使用容器时,需要注意某种操作的时间复杂度

3)成员函数

泛型程序设计 随笔 第2张

泛型程序设计 随笔 第3张

3.迭代器

 用于指向顺序/关联容器中的元素,分const和非const,通过迭代器可以读取它指向的元素,通过非const迭代器可以修改它指向的元素。

1)定义:容器类名::iterator/const_iterator/reverse_iterator 变量名 (容器类即 从容器模板实例化出来的类)

访问迭代器指向的元素: *迭代器变量名

举例如下:

泛型程序设计 随笔 第4张

2)双向/随机访问迭代器

vector/deque支持随机访问迭代器,list/关联容器支持双向迭代器,容器适配器不支持迭代器

双向迭代器 p 可进行 p++/++p/p--/--p/*p/=/==/!=等操作 

随机访问迭代器可进行双向迭代器的所有操作以及 +=/-=/+/-/[]/</>等操作

注:有些算法如sort/binary_search需要使用随机访问迭代器,那就不能使用list/关联容器

泛型程序设计 随笔 第5张

泛型程序设计 随笔 第6张

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄