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

    xiaoxiao2021-03-25  120

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

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

    简单的来说,就是分为三部分,算法,迭代器,容器,其中迭代器是算法和容器之间的桥梁,可以让程序员可以通过算法对容器进行操作,而且这些算法也不是容器相关的,比如说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迭代器

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

    转载请注明原文地址: https://ju.6miu.com/read-7958.html

    最新回复(0)