C++STL学习笔记1:STL基本上是个什么东西?

本文深入解析STL的概念、组成及应用,包括容器、迭代器和算法,旨在帮助理解其强大功能与使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        为了让学习多点动力,不致于让枯燥的术语和语法规则搅得一头雾水,首先说点STL很提劲的功能,勾起咱们这些个功利主义者的兴趣。

        STL是一个泛型程序库。所谓泛型,就是任意的数据类型。你可以把任意的数据类型放在STL的容器里,用STL提供的算法库进行处理。你可以抛开排序、查找、最大/最小值这些算法的代码,也不用从底层构造堆栈、队列、二叉堆、排序二叉树这些数据结构,在STL里,这些都是现成的,直接拿来用就行了。而且,你根本不用怀疑STL中这些代码的正确的,它们是经过多少次实践检验过了,不会犯那种你经常会犯的偶然错误。

        当然,STL强大的同时也表明它并不简单。要学好它并非易事。所以嘛,代价总是有的。但关键一点是看付出的代价与获得的利益相比,谁轻谁重。小时候,我做过一题语言阅读题,叫“磨刀不误砍柴功”。我想,不用说内容,你懂的......

        首先,介绍一下STL是什么意思。它是英文S.....T......L.......等3个单词的缩写,中文意思是“标准模板库”。我觉得STL无论读起来还是写起来都比“标准模板库”更省力,所以今后在没有歧义的情况下,我都这样称呼了。

        STL并不是C++标准库的全部,它只是其中的一部分——非常核心的那个部分。

        再看STL的组成(或称组件),最关键是“容器”、“迭代器”、“算法”这3个组件。

        所谓容器(Containers),是用来存放和管理对象的器皿。不同的容器存放对象的方法有所不同,造成同一个操作在不同容器上实现的时间效率不一定相同。例如,vector容器访问任一元素的时间是O(1),删除某个位置的元素的时间是O(n)。而list容器则相反,访问任一元素的时间是O(n),删除某个位置的元素的时间是O(1)。因此,我们在选择容器时,就要根据操作的类型与操作次数的多寡来决定最适合的容器类型。

        所谓迭代器(Iterators),是用来遍历(或访问)容器中的某个或某一些元素的“指针”。迭代器能够从容器中某个指定的位置开始,访问当前元素(用*运算符),然后以非常简单的方式前进到下一个位置(用++运算符),直到遇到一个结束位置。迭代器的强大之处在于,无论什么类型的容器,是一个线性的vector也好,一个树形的map也罢,都能以一致的方式进行处理。这就为后面的算法组件做到”编写一次算法,就可把它应用到任意容器上“提供了保障。

        所谓算法(Algorithm),是出于不同目的进行查找、统计、排序、修改、插入、删除等。许多算法对于所有的容器都适用。而某些容器由于自身的特殊性,专门有一些算法。

        关于三个组件的关系,引用一段话:”STL的基本观念是将数据和操作分离。数据由容器类别加以管理,操作则由可定制的算法定义之。迭代器在两者之间充当粘合剂,使任何算法都可以和任何容器交互运作。“

        STL设计的一个核心思想是泛型编程。因此,容器和算法看待任意的C++语言内置的基本数据类型(types)和编程者构造的类类型(classes)而言,都是无差别的。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值