C++ 学习轨迹之 STL

本文介绍了C++的STL(标准模板库),包括其作为容器、算法和迭代器的集合,以及如何使用迭代器作为算法与容器间的桥梁。文章详细讲解了STL的组成部分,如容器(如vector、list、map等)、迭代器的分类和操作,以及算法的四大类别。此外,还讨论了命名空间和标准头文件的作用。

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

一.STL含义
1.STL指的是标准模板库,是一些算法和组件的集合,目的是不用重新开发,可以用现成的组件。
2.其本质是一些容器的集合,包括set、map、list、stack、map、vector、queue、iterator。
3.STL 是一种泛型编程,即关注算法本身,区别于面向对象关注于数据方面,它们的共同点是抽象和构造可重用代码。
4.模板使得算法独立于数据类型;而迭代器使得算法独立于容器类型,迭代器用作算法和容器之间的桥梁,几乎STL提供的所有算法都是通过迭代器存取元素序列进行工作的,每一个容器都定义了其本身所专有的迭代器,用以存取容器中的元素。
5.STL提供了大约100个实现算法的模版函数。
6.STL由6部分组成:容器、迭代器、算法、适配器、函数对象、内存分配器组成;其中容器用来存放数据,每个容器表现为类模板;迭代器用来将容器和算法联系起来,是一种智能指针,,通过运算符重载一般化了指针的概念;算法包括对数据集合的查找、排序、复制等操作,都以函数模板的形式出现;适配器用来修饰接口,分为容器配接器、迭代器配接器、函数对象配接器;内存分配器用来为各种容器分配和管理内存空间。
7.namespace即命名空间:本质就是在类的作用域之外定义更大的作用范畴,即延申作用范围,可以避免命名冲突的问题;实质就是为类定义容器,即将一些类和函数封装在容器中,可以用::调用,也可以用using namespace~;或者using ::;
8.标准头文件:cstdlib、cmath、cstring、iomanip、limits等
9.顺序容器类的头文件、、;关联类容器:、;适配器容器:、、;迭代类容器:;数值方法:;函数对象:
10.STL共提供了7种容器:顺序容器即线性表:向量vector、链表list、双端队列deque;关联容器:集合set、多重集合mutiset、映射map、多重映射multimap。
11.顺序容器都可以用两种方式访问:随机访问和顺序访问,而list只能顺序访问;而对于关联容器只能用索引的方式访问,不存在线性关系,没有首尾。
12.容器的构造:所有容器类都提供了构造函数和析构函数以及一个拷贝函数,前者是用来构造容器;后者用来释放容器所占用的存储空间。
13.容器元素访问:所有容器访问元素都要借助迭代器—智能指针即利用迭代器对象指向容器内的元素,所以可以在迭代器对象前+ *访问元素,还能用++和–移动指针。
14.创建、插入、删除、访问这些都是所有容器的共有操作。
15.v1.front()–返回容器首元素,v1.back()–返回容器末尾元素v1.push_back(element)—向容器末尾添加元素,v1.pop_back()—删除容器末端元素;以上是专属于vector的操作;可以看出区别在于限定了操作方向,简化了操作,即只能从容器底部添加和删除元素,且只能从两端访问元素。
16.小trick:size_t i=0;i<v1.size();i++
cout<<v1[i] //v1容器里装的是字符串,且可以通过下标来访问。
17.vector初始化方式:大括号和圆括号,前者则是实在的具体元素,而后者(10,“Hi")表示存有10个Hi的元素。
18.对于链表:首先它不能想容器那样可以随机访问,但也有自己的特色:l.push_front()–将数据插入到首端;l.splice(pos,a)将链表对象a中的元素插入到当前链表pos之前,并清空链表;l.splice(pos,a,posa)将链表对象a中从位置posa后的元素转移到l的位置pos之前;l.splice(pos,a,abeg,posa)将链表对象a这一段的元素插入到l链表pos之前;l.unique()删除链表相邻重复的元素;remove(x)删除所有和x相等的链表元素;l.sort()排序;l.reverse()逆转链表中的元素。
19.deque(双端队列)可以两端push和pop.
20.容器可以作为函数参数,print(v1) -----void print(vector&v2)
21.小trick:cout<<hex<<setw(6)<<sefill(‘0’)<<endl; 即设定了输出格式:即输出十六进制、6个字符宽、不满6个字符就用‘0’补充
22.map<sting,int>m1;m1[key]=value

二.迭代器

1.迭代器分为:输入–能读不一定能写、输出–能写不一定能读、前向迭代器–既能读又能写、双向迭代器、随机访问迭代器。
2.3个辅助函数模板:advance(iter,5)//指针向后移动5个元素;advance(iter,-3)//指针向前移动3个单位。
3.vector<int ::const_iterator itv;//只读迭代器即相对于普通迭代器,只能访问,不能修改。

三.算法

1.STL算法可分为四类:不改变容器序列和个数的算法、改变容器元素序列、排序、通用数值算法
2.第一类:find();count()、equal()
3.第二类:copy()、reverse()、fill()
4.第三类:sort()
5.accumulate()
6.#include<algorithm>
7.copy(v1.begin(),v1.end(),output)//将v1里的内容拷贝到output即输出流迭代器中。
8.排序算法使用:sort(v1.begin(),v1.end(),greater<int>());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值