STL的出现背景
长久以来,软件届就一直希望建立一种可重复利用的东西
C++的面向对象和泛型编程思想,目的就是复用性的提升
数据结构和算法没能有一套标准,导致被迫从事大量重复工作
为了建立数据结构和算法的一套标准,那么STL就诞生了
STL基本概念
STL全称:标准模板库(Standard Template Library)
STL从广义上分为:容器(container)算法(algorithm)迭代器(iterator)
容器和算法之间通过迭代器进行无缝连接
STL几乎所有的代码都采用了模板类或者模板函数
STL六大组件
STL六大组件分别是:容器、算法、迭代器、仿函数、适配器、空间配置器。
容器:各种数据结构,如vector、list、deque、set、map等,用来存放数据。
算法:常用的各种算法,如sort、find、copy、for_each等
迭代器:扮演了容器与算法之间的粘合剂,迭代器的使用非常类似于指针,初学阶段我们可以先理解迭代器为指针。
仿函数:行为类似函数,可作为算法的某种策略
适配器:一种用来修饰容器或者仿函数或迭代器结构的东西。
空间配置器:负责空间的配置与管理。
初识容器算法迭代器
迭代器种类:
常用的迭代器种类为双向迭代器,和随机访问迭代器。
了解STL容器、算法、迭代器概念之后,我们利用代码感受STL的魅力
STL中最常用的容器为vector,可以理解为数组,下面我们将学习如何向这个容器中插入数据、并遍历这个容器。
vector容器的初次使用
容器: vector
算法: for_each
迭代器:vector::iterator
存放内置数据类型
首先创建整型的vector容器 ve,将1、0、0、8、6依次尾插入ve容器内,然后利用迭代器来访问容器中的数据,分为while、for、for_each三种循环方法:
1、while循环
创建两个指针itBegin、itEnd分别指向ve容器的第一个位置和最后一个元素的下一个位置,利用while循环,当递增的itBegin不等于itEnd时,输出解引用的itBegin,就可以得到该位置对应的数据,递增的语句是itBegin++。
2、for循环
创建一个指针即可,也是让指针从begin递增,在不等于end时依次解引用输出数据。这个方法比较方法,我个人推荐使用
3、for_each循环
使用for_each循环需要先引入头文件#include<algorithm>,这个头文件包含了算法里的方法。参数列表分别是:起始位置,终止位置,打印函数。所以我定义了一个printInfo函数来不换行打印数据。
存放自定义数据类型
vector通过参数列表里的数据类型来决定容器内存放的数据类型,这里参数列表指定时Person类,那么就可以将创建的对象p1、p2、p3存入容器内,再利用for循环打印数据。和上面不同的是,打印姓名身高用的是->操作符,这是因为it相当于一个指针,所以可以直接通过指针调用对象的属性,当然也可以这样写:(*t).name,先解引用再调用的方式也可以。
vector容器的嵌套使用
容器相当于一个数组,那么数组嵌套数组不就是二维数组吗,我们来测试一下。
创建的这个V容器,他的参数列表是vector<int>,那就说明该容器存入的是存入整型数据的容器,说白了就是二维整型数组。然后先创建小容器并进行赋值,再将小容器尾插入大容器内,调用自定义的printVector函数来打印数据。
二维数组都是两层for循环打印,类似的对于嵌套容器来说也一样。 第一层for循环决定着循环的次数,第二层for循环的(*T)用到了二级指针,也就是说大容器T指针解引用之后还是一个小容器的指针,根据T++这行代码来更新指向也就能改变小指针的容器,从而输出嵌套容器内的所有数据。
广州天河区珠江新城富力盈力大厦北塔2706
020-38013166(网站咨询专线)
400-001-5281 (售后服务热线)
品牌服务专线:400-001-5281
长沙市天心区芙蓉中路三段398号新时空大厦5楼
联系电话/ (+86 0731)88282200
品牌服务专线/ 400-966-8830
旗下运营网站:
Copyright © 2016 广州思洋文化传播有限公司,保留所有权利。 粤ICP备09033321号