黑马c++----STL笔记1
创始人
2025-05-30 08:10:59

2.STL

2.1STL的诞生

在这里插入图片描述

2.2STL基本概念

  • STL(standard template library,标准模板库)
  • STL从广义上分为 : 容器(container), 算法(algorithm), 迭代器(iterator)
  • 容器和算法`之间通过迭代器进行无缝连接
  • STL几乎所有的代码都采用模板类或者函数模板

2.3STL六大组件

在这里插入图片描述

2.4 STL中容器,算法,迭代器在这里插入图片描述

容器:置物之所也
STL容器就是将运用最广泛的一些数据结构实现出来常用的数据结构:数组,链表,树,栈,队列,集合,映射表等,这些容器分为序列式容器关联式容器两种:
序列式容器:强调值的排序,序列式容器中的每个元素均有固定的位置
关联式容器:二叉树结构,各元素之间没有严格的物理上的顺序关系

算法:问题之解法也
有限的步骤,解决逻辑或数学上的问题,这一门学科我们叫做算法(Algorithms)算法分为:质变算法和非质变算法。

质变算法:是指运算过程中会更改区间内的元素的内容。例如拷贝,替换,删除等等
非质变算法:是指运算过程中不会更改区间内的元素内容,例如查找、计数、遍历、寻找极值等等

迭代器:容器和算法之间粘合剂
提供一种方法,使之能够依序寻访某个容器所含的各个元素,而又无需暴露该容器的内部表示方式。每个容器都有自己专属的迭代器,迭代器使用非常类似于指针,初学阶段我们可以先理解迭代器为指针.

在这里插入图片描述

2.5容器算法迭代器初识

了解STL中容器、算法、迭代器概念之后,我们利用代码感受STL的魅力.STL中最常用的容器为Vectpr,可以理解为数组,下面我们将学习如何向这个容器中插入数据、并遍历这个容器

2.5.1 vector存放内置数据类型

容器: vector
算法: for_each
迭代器: vector::iterator

示例:

在这里插入图片描述

#include 
using namespace std;// #include 
// #include  
//vector 容器存放内置数据类型void myPrint(int val)
{cout << val << endl; 
} void test01()
{//创建了一个vetcor容器对象,并且通过模板参数指定容器中存放的数据类型 vector v; //向容器中插入数据v.push_back(10); v.push_back(20); v.push_back(30); v.push_back(40); //通过迭代器访问容器数据,每一个容器都有自己的迭代器,迭代器是用来遍历容器中的元素 //起始迭代器  指向容器中第一个元素 vector::iterator itBegin = v.begin(); //结束迭代器  指向容器中最后一个元素的下一个位置 vector::iterator itEnd = v.end(); //第一种遍历方式while (itBegin != itEnd) {cout << *itBegin << endl; itBegin++; } //第二种  20~29行 归总一行结束 for  (vector ::iterator it = v.begin();it != v.end();it++){cout << *it << endl; } //第三种  利用STL提供的遍历算法for_each(v.begin,v.end,myPrint) ; 
} int mian()
{test01();return 0 ; 
} 

底层实现
回调技术?

2.5.2 Vector存放自定义数据类型

学习目标 : vector 中存放自定义数据类型,并且打印输出

#inclde 
using namespace std;//vector 容器中存放自定义数据类型Class Person
{
public :Person(string name, int age) {this-> mname = name;this-> mage = age; } string mname;int mage;} ; void test01()
{vectorv;Perosn p1("aaa", 10); Perosn p2("bbb", 20);Perosn p3("ccc", 30);Perosn p4("ddd", 40);Perosn p5("eee", 50);//向容器中添加数据v.push_back(p1);v.push_back(p2);v.push_back(p3);v.push_back(p4);v.push_back(p5); //遍历容器中的数据for(vector::iterator it = v.begin(); it != v.end();it++){cout << "姓名 :" << (*it).mname << "年龄 : " << (*it).mage << endl; cout << "姓名 :" << it->mname << "年龄 : " << it->mage << endl; } } // 存放自定义数据类型 指针  相当于存放地址 void test02()
{vectorv;Perosn p1("aaa", 10); Perosn p2("bbb", 20);Perosn p3("ccc", 30);Perosn p4("ddd", 40);Perosn p5("eee", 50);//向容器中添加数据v.push_back(&p1);v.push_back(&p2);v.push_back(&p3);v.push_back(&p4);v.push_back(&p5); //遍历容器for(vector::iterator it = v.begin(); it != v.end();it++){cout << "姓名 :" << (*it)->mname << "年龄 : " << (*it)->mage << endl; } 
} int main()
{test01();test02();return 0; 
} 

2.5.3Vector容器嵌套容器

学习目标: 容器中嵌套容器,我们将所有数据进行遍历输出

#inclde 
using namespace std;//vector 容器嵌套容器 void test01()
{vector< vector >v;// 创建小容器vector v1; vector v2; vector v3; vector v4; //向小容器中添加数据for(int i = 0; i<4;i++){v1.push_back(i + 1);v2.push_back(i + 2); v3.push_back(i + 3); v4.push_back(i + 4);  }//将小容器插入到大容器中 v.push_back(v1);v.push_back(v2); v.push_back(v3); v.push_back(v4); //遍历大容器中的数据for(vector< vector >::iterator it = v.begin(); it != v.end();it++){//(*it) ------- 容器 vectorfor (vector::iterator vit = (*it).begin(); vit != (*it).end();vit++) {cout << *vit << "  "; } cout << endl; } } int main()
{test01();return 0; 
} 

相关内容

热门资讯

wool是羊绒还是羊毛 极速百... wool是羊绒还是羊毛目录wool是羊绒还是羊毛wool是羊绒还是羊毛有谁知道在西服里面 WOOL这...
手账小机关之爱心贺卡怎么做,简... 手账小机关之爱心贺卡怎么做目录手账小机关之爱心贺卡怎么做简单手帐小机关教程爱心贺卡怎么做手账本怎么做...
最浪漫的早安问候语,早安问候语... 最浪漫的早安问候语目录最浪漫的早安问候语早安问候语甜蜜情话跪求适合在早上发的问候短信,给女友的,浪漫...
关于函数递归调用导致的Stac... 身为工程师,Stack Overflow这网站大家应该都是熟到不能再熟。如果没有他帮忙解决各种莫名其...
徐工集团工资待遇如何?(徐工集... 本篇文章极速百科给大家谈谈徐工集团工资待遇如何?,以及徐工集团工资怎么样对应的知识点,希望对各位有所...
【分享】基于TPS65140的... 在一次项目定制中,客户要求我们将CPU主控和LCD显示屏电压驱动电路做成一体板...
初识C语言(3) 操作符,关键字(typedef、static),指针
一口一口吃掉yolov8(2) 前面介绍了训练的第一个部分,也是大部分人在网上找得到的文章,但是后面2个...
lol女枪西部牛仔有没有特效,... lol女枪西部牛仔有没有特效目录lol女枪西部牛仔有没有特效烬哪个皮肤手感好?lol女枪西部牛仔有没...
灭鼠神器超声波管用吗,超声波灭... 灭鼠神器超声波管用吗目录灭鼠神器超声波管用吗超声波灭老鼠有效果吗?电子猫超声波驱鼠器电子灭鼠器,管用...
5173交易账号收多少手续费啊... 本篇文章极速百科给大家谈谈5173交易账号收多少手续费啊,以及5173账号交易收费标准对应的知识点,...
父亲节是每年的几月几号呢,父亲... 父亲节是每年的几月几号呢目录父亲节是每年的几月几号呢父亲节母亲节是几月几号 父亲节和母亲节是每年的几...
53-exec进程替换 exec进程替换 一.exec系列 1.execl #include#include#include...
CF1737E Ela Goe... CF1737E Ela Goes Hiking 题目大意 nnn 只蚂蚁站成一排,第 ...
福州一日游哪里好玩,福州一日游... 福州一日游哪里好玩目录福州一日游哪里好玩福州一日游必去景点福州一天游,求推荐去哪福州一日游,有什么好...
新车5到6万买什么车好,预算5... 新车5到6万买什么车好目录新车5到6万买什么车好预算5万,有哪些车款可以推荐?买车5-6万买什么车好...
网络语言JMS是什么意思(jm... 本篇文章极速百科给大家谈谈网络语言JMS是什么意思,以及jms是什么意思中文翻译对应的知识点,希望对...
苹果6id锁怎么强制解除,苹果... 苹果6id锁怎么强制解除目录苹果6id锁怎么强制解除苹果六忘记ID激活锁怎么办如何强制解除id锁的方...
机器人阻抗控制(二) #阻抗控制 #机器人控制 #动力学方程 《Cartesian Impedance Control o...
SkyWalking 日志收集 SkyWalking 日志收集一、需求二、步骤2.1 pom文件引入依赖2.2 logback-sp...
DETR网络模型构建 这篇文章主要为记录DETR模型的构建过程 首先明确DETR模型的搭建顺序:首先是bac...
算法强化每日一题--组队竞赛 大家好 先看看题目 链接:组队竞赛__牛客网 [编程题]组队竞赛 牛牛举办了一次编...
什么是人际交往,什么是人际交往... 什么是人际交往目录什么是人际交往什么是人际交往?影响人际交往的因素有哪些?什么是人际交往人际交往指的...
自考大专什么时候报名,自考大专... 自考大专什么时候报名目录自考大专什么时候报名自考大专怎么报名 报考时间在几月份?每年的什么时候报名自...
蚕的变化过程,蚕的一生经历了哪... 蚕的变化过程目录蚕的变化过程蚕的一生经历了哪几个阶段?咨询:蚕的演变过程?蚕的生长变化顺序是怎样的?...
汽车出现service是什么意... 汽车出现service是什么意思目录汽车出现service是什么意思车上的service是什么意思?...
arcpy基础篇(6)-制图脚... arcpy.mapping模块可以实现地图制图的自动化,它的具体功能包括管理地图文档、...
基于 Zynq 的振动台控制器... 3 振动台控制器架构设计与实现 如前所述,Zynq-7000 本身已经具有了独特的架...
为什么手机收不到验证码短信,为... 为什么收不到短信验证码 3. 曾经向运营商申请过屏蔽短信号码,或添加过黑名单。 4. 短...
中国移动如何免费领取10G流量... 中国移动如何免费领取10G流量目录中国移动如何免费领取10G流量免费领10g流量的软件中国移动送10...