寒假训练营 第八节 基础算法(三)总结

(快排、归并以及二分查找这里就不说了,前面一节都说了,这里就说一下STL vevtor 容器)

C++ STL

STL就是建立在模板函数和模板类基础之上的功能强大的库

  • 模板函数可以实现一般化的常用算法( 如统计、排序、查找等)
  • 模板类可以实现支持几乎所有类型的容 器,用来实现常用的数据结构(如链表 、栈、队列、平衡二叉树等)
  • 一个具有工业强度的,高效的C++程序库
  • 它被容纳于C++标准程序库(C++Standard Library)中,是ANSI/ISO C++标准中最新的也是
    极具革命性的一部分
  • 该库包含了诸多在计算机科学领域里所常用的基 本数据结构和基本算法。
  • 为广大C++程序员们提供了一个可扩展的应用框架 ,高度体现了软件的可复用性
  • 有了STL,不必再从头写大多的标准数据结构和算 法,并且可获得非常高的性能。
C++模板

函数模板(function template)

  • 是独立于类型的函数
  • 可产生函数的特定版本

函数模板方法克服了 C语言解决上述问题时用大量不同函数名表示相似功能的坏习惯 克服了宏定义不能进行参数类型检查的弊端 克服了 C++函数重载用相同函数名字重写几个函数的繁琐
缺点:调试比较困难,一般先写一个特殊版本的函数,运行正确后,改成模板函数

类模板(class template)

  • 跟类相关的模板,如vector
  • 可产生类对特定类型的版本,如 vecto r
STL头文件

在这里插入图片描述

STL六大组件

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

C++ STL中的容器

可以用于存放各种类型的数据(基本类型的变量,对象等)的数据结构。
容器分为三大类:
1)顺序容器
vector:后部插入/删除,直接访问 deque:前/后部插入/删除,直接访问 list:双向链表,任意位置插入珊ij除
2)关联容器
set:快速查找,无重复元素
multiset :快速查找,可有重复元素
map:一对一映射,无重复元素,基于关键字查找
multimap:一对一映射,可有重复元素,基于关键字查找 前2者合称为第一类容器
3)容器适配器
stack: LIFO
queue: FIFO
priority_queue:优先级高的元素先出

顺序容器

(1)vector 头文件 < vector >
实际上就是个动态数组。随机存取任何元素都能在常数时 间完成。在尾端增删元素具有较佳的性能。
(2)deque 头文件 < deque >
也是个动态数组,随机存取任何元素都能在常数时间完成 (但性能次于vector)。在两端增删元素具有较佳的性能。
(3)list 头文件 < list >
双向链表,在任何位置增删元素都能在常数时间完成。不支持随机存取。
上述三种容器称为顺序容器,是因为元素的插入位置同元素的值无关。

关联容器

关联式容器内的元素是排序的,插入任何元素, 都按相应的排序准则来确定其位置。关联式容器的特点是在查找时具有非常好的性能。
(1)set/multiset:头文件 < set >
set即集合。set中不允许相同元素,multiset中允许存在相 同的元素。
(2)map/multimap:头文件 < map >
map与set的不同在于map中存放的是成对的key/value。 并根据key对元素进行排序,可快速地根据key来检索元素 map同multimap的不同在于是否允许多个元素有相同的key值。
上述4种容器通常以平衡二叉树方式实现,插入和检索的时间都是O(logN)

容器适配器

(1)stack :头文件 < stack >
栈。是项的有限序列,并满足序列中被删除、检索和修改 的项只能是最近插入序列的项。即按照后进先出的原则
(2)queue :头文件 < queue >
队列。插入只可以在尾部进行,删除、检索和修改只允许 从头部进行。按照先进先出的原则。
(3)priority_queue :头文件 < queue >
优先级队列。最高优先级元素总是第一个出列
在这里插入图片描述
在这里插入图片描述

vector

vector 容器 是 STL 中最常用的容器之一,它和 array 容器非常类似,都可以看做是对 C++ 普通数组的“升级版”。不同之处在于,array 实现的是静态数组(容量固定的数组),而 vector 实现的是一个动态数组,即可以进行元素的插入和删除。

  • vector模拟动态数组
  • vector的元素可以是任意类型T,但必须具备赋值和拷贝能力(具有public拷贝构造函数和重载的赋值操作符)
  • 必须包含的头文件#include < vector >
  • vector支持随机存取
  • vector的大小(size)和容量(capacity)
    size返回实际元素个数,capacity返回vector能容纳的元素最大数量。如果插入元素时,元素个数超过capacity,需要重新配置内部存储器。
  • 构造、拷贝和析构在这里插入图片描述
  • 非变动操作在这里插入图片描述
  • 赋值操作在这里插入图片描述
  • 元素存取
    在这里插入图片描述
  • 迭代器相关函数
    迭代器持续有效,除非发生以下两种情况:
    (1)删除或插入元素
    (2)容量变化而引起内存重新分配
    在这里插入图片描述
  • 安插(insert)元素
    在这里插入图片描述
  • 移除(remove)元素
    在这里插入图片描述

C++ STL详解超全总结(快速入门STL)
史上最全的C++ STL 容器大礼包

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值