C++标准模板库(STL)简介

标准模板库,是一组模板类和函数,向程序员提供了 :

  • 存储信息的容器
  • 访问存储信息的迭代器
  • 操作容器内容的算法

简单的来说,就是分为三部分,算法,迭代器,容器,其中迭代器是算法和容器之间的桥梁,可以让程序员可以通过算法对容器进行操作,而且这些算法也不是容器相关的,比如说reverse算法,对于多个容器都可以使用。本篇主要简单的介绍一下标准模板库(不包括C++11标准),如果想要系统的学习,还是需要去看相关书籍。

STL容器

容器是用于存储数据的STL类,容器大概分为2种:

  • 顺序容器
  • 关联容器

顺序容器:指的是容器内的数据是按照顺序存储的。顺序容器的插入速度较快,但是查找速度较慢。
顺序容器有:vector,deque,list

关联容器:指的是容器内的数据是按照键值对来存储的,或者说是指定的顺序来存储的,就像字典一样,关联容器的特点是,插入速度慢,但是读取速度快。
关联容器有:set,map,multiset,multimap

有些STL实现也支持hash_set,hash_multiset,hash_map,hash_multimap。这些容器有更好的搜索性能,搜索所需要的时间和容器的大小无关。但是,这些容器并不是遵循标准的容器,如果想要应用程序在不同的平台之间能够移植,还是需要遵循标准的容器。

string虽然操作和容器十分相似,但是由于string不能存取任意的数据类型,所以严格来说,还不能被称为容器。

选择正确的容器

容器类型优点缺点
std::vector顺序容器在末尾插入数据快
可以像访问数组一样访问
调整大小时將影响性能
搜索时间与容器大小成正比
只能在末尾插入数据
std::deque顺序容器具备vector的所有优点
还可以在头部插入数据
插入时间也是固定的
有vector的所有缺点
但与vector不同的是,根据规范,deque不需要支持reverse()函数。
std::list顺序容器在list中间,开头,结尾插入数据,所需时间都是固定的
將元素从任意位置删除,所需要的时间也是固定的
插入或者删除元素后,指向其它元素的迭代器仍然有效
不能像数组那样用下标进行访问
搜索时间比vector要慢,因为list并不是存储在一块连续的内存空间中
搜索时间和list容器中的元素个数成正比
std::set关联容器搜索时间比顺序容器快得多插入时间比顺序容器慢
std::multiset关联容器优点与set类似
在需要存储重复的元素时,可以使用multiset
缺点与set类似
std::map关联容器用于存取键值对的容器,并根据键来排序(map无法根据值来排序)
搜索速度不和元素个数成正比
set::multimap关联容器可以存储键相同的元素
优点和map类似
缺点与map类似

Detail: map容器是存储键值对的,只能按照键来排序,如果想要值来排序的话,有几种解决方案,1,新建一个map容器,將原来map里的键值对调换顺序存储到新的map容器中,当然,要保证逆序后的map键值都是唯一的,否则可以使用multimap。 2,新建一个set或者vector容器,把map里的每个键值对保存到新的set和vector里,然后自定义排序的函数对象进行排序。

STL迭代器

最简单的迭代器是指针,给定一个指向数组第一个元素的指针,可以递增该指针依次访问数组元素,当然,也可以操作指针所指向的元素。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值