STL学习笔记

1 基本概念

1.1 STL

  1. STL(Standard Template Library,标准模板库)
  2. STL从广义上分为: 容器(container) 算法(algorithm) 选代器(iterator)
  3. 容器和算法之间通过迭代器(看作指针)进行无缝连接
  4. STL 几乎所有的代码都采用了横板类或者模板函数

1.2 容器

STL容器就是将运用最广泛的一些数据结构实现出来

常用的数据结构:数组,链表,树,,队列,集合映射表等

这些容器分为序列式容器关联式容器两种:

  1. 序列式容器:强调值的排序,序列式容器中的每个元素均有固定的位置
  2. 关联式容器:二叉树结构,各元素之间没有严格的物理上的顺序关系

1.3 算法

根据运算是否会更改区间内的元素,算法分为:

  1. 质变算法
  2. 非质变算法

1.4 迭代器

2 容器(vector)

2.1 定义及其基本使用

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;void myPrint(int val){cout << val << endl;
}
void test01(){//定义vectorvector<int> v;//往容器中插入数据v.push_back(10);v.push_back(20);v.push_back(30);v.push_back(40);//1遍历//1.1 方式一while//通过迭代器访问容器中的数据vector<int>:: iterator itBegin = v.begin();//起始迭代器  指向容器中第一个元素vector<int>:: iterator itEnd = v.end();//结束迭代器  指向容器中最后一个元素的下一个位置while(itBegin != itEnd){cout << *itBegin << endl;itBegin ++;}cout << "方式一----------" << endl;//1.2 方式二forfor(vector<int>:: iterator it = v.begin();it != v.end();it++){cout << *it << endl;}cout << "方式二----------" << endl;//1.3 方式三  利用STL提供遍历算法for_each(v.begin(), v.end(), myPrint);cout << "方式三----------" << endl;}
int main() {test01();return 0;
}
10
20
30
40
方式一----------
10
20
30
40
方式二----------
10
20
30
40
方式三----------

2.2 vector存放自定义数据类型

#include <iostream>
#include <vector>
#include <string>
using namespace std;class Person
{
public:Person(string name, int age){this->m_Name = name;this->m_Age = age;}string m_Name;int m_Age;
};/*
void myPrint(Person val){cout << "姓名:"<< val.name <<  "年龄:"<< val.age  <<endl;
}
*/void test01(){//定义vectorvector<Person> v;Person p1("aaa", 10);Person p2("bbb", 20);Person p3("ccc", 30);Person p4("ddd", 40);Person p5("eee", 50);//往容器中插入数据v.push_back(p1);v.push_back(p2);v.push_back(p3);v.push_back(p4);v.push_back(p5);//1遍历/*//1.1 方式一while//通过迭代器访问容器中的数据vector<Person>:: iterator itBegin = v.begin();vector<Person>:: iterator itEnd = v.end();while(itBegin != itEnd){cout << "姓名:"<< (*itBegin).name <<  "年龄:"<< (*itBegin).age  <<endl;}cout << "方式一----------" << endl;*///1.2 方式二forfor(vector<Person>:: iterator it = v.begin(); it != v.end(); it++){cout << "姓名:"<< (*it).name <<  "年龄:"<< (*it).age  <<endl;}cout << "方式二----------" << endl;/*//1.3 方式三  利用STL提供遍历算法for_each(v.begin(), v.end(), myPrint);cout << "方式三----------" << endl;*/}
int main() {test01();return 0;
}

另外还有指针成员访问未写。

2.3 vector嵌套vector

#include <iostream>
#include <vector>using namespace std;void test01(){//定义vectorvector< vector<int> > v;//创建小容器vector<int> v1;vector<int> v2;vector<int> v3;vector<int> 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<int> >:: iterator it = v.begin(); it != v.end(); it++){for(vector<int>:: iterator vit = (*it).begin(); vit != (*it).end(); vit++){cout << *vit << " ";}cout <<endl;}
}
int main() {test01();return 0;
}
1 2 3 4 
2 3 4 5 
3 4 5 6 
4 5 6 7 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/8924.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图片如何压缩到500kb以下?3步完成图片压缩

在日常生活和工作中&#xff0c;经常需要处理各种图片&#xff0c;而有时候图片文件过大&#xff0c;不仅占用了大量的存储空间&#xff0c;还可能影响文件的传输速度和加载速度。因此&#xff0c;如何将图片压缩到500kb以内成为了许多人的需求&#xff0c;普通的图片压缩可能没…

使用Docker安装Whistle Web Debugging Proxy

大家好&#xff0c;继续给大家分享如何使用docker来安装Whistle Web Debugging Proxy&#xff0c;关于Whistle Web Debugging Proxy的介绍和使用&#xff0c;大家可以参考下面文章&#xff0c;希望本文能够给大家的工作带来一定帮助。 Whistle Web Debugging Proxy介绍及使用 …

vue+lodop实现web端打印标签功能

背景&#xff1a;项目要求在web端连接标签打印机&#xff0c;打印收件人信息 lodop打印插件地址&#xff1a;Lodop和C-Lodop官网主站 在项目中使用 1、去官网下载lodop包下载中心 - Lodop和C-Lodop官网主站 windows系统直接下载windows32版的就可以 2、解压安装 点击CLodop…

SpringCloud Config 分布式配置中心

SpringCloud Config 分布式配置中心 概述分布式系统面临的——配置问题ConfigServer的作用 Config服务端配置Config客户端配置 可以有一个非常轻量级的集中式管理来协调这些服务 概述 分布式系统面临的——配置问题 微服务意味着要将单体应用中的业务拆分成一个个字服务&…

linux不同引号的含义(随手记)

单引号&#xff1a; 所见即所得,单引号里面的内容会原封不动输出. echo test--hostname--$(hostname)--{1..5} test--hostname--$(hostname)--{1..5}双引号&#xff1a; 和单引号类似,对双引号里面的特殊符号会进行解析,对于{}花括号(通配符)没有解析. echo "test--host…

python如何整体缩进

python自带编辑器的缩进和取消缩进快捷键&#xff1a; 整体缩进 Ctrl【 整体取消缩进 Ctrl】 pycharm编辑器的缩进和取消缩进快捷键&#xff1a; 整体缩进&#xff1a; tab 整体取消缩进&#xff1a; tabshift

HDMI ARC功能详解及应用介绍

一、HDMI HDMI(High-Definition Multimedia Interface&#xff0c;高清多媒体接口)&#xff0c;是一种专用的音频/视频接口&#xff0c;用于发送未压缩的视频数据和压缩/未压缩的音频数据。HDMI是模拟视频标准的数字替代品。HDMI视频和音频信号传输通道采用了TMDS&#xff08;T…

【经验总结】Vue2中的全局变量(store

需求场景 需要在vue中存储一个可变的&#xff0c;可读写的全局变量在不同的js、页面中均可调用和读写 技术&#xff1a;使用vue的store 用法总结 一、定义变量 1、找到vue的/src/store路径&#xff0c;在modules文件夹下创建文件&#xff08;这里便于测试创建demo.js&…

51单片机入门:DS1302时钟

51单片机内部含有晶振&#xff0c;可以实现定时/计数功能。但是其缺点有&#xff1a;精度往往不高、不能掉电使用等。 我们可以通过DS1302时钟芯片来解决以上的缺点。 DS1302时钟芯片 功能&#xff1a;DS1302是一种低功耗实时时钟芯片&#xff0c;内部有自动的计时功能&#x…

十二届蓝桥杯Python组3月中/高级试题 第二题

** 十二届蓝桥杯Python组3月中/高级试题 第二题 ** 第二题&#xff08;难度系数 3&#xff0c;20 个计分点&#xff09; 编程实现&#xff1a; 给定一个正整数&#xff0c;判断这个正整数是否能被5整除。 输入描述&#xff1a;输入一个正整数n 输出描述&#xff1a;如果n可以…

SpringBoot启动流程源码解析

目录 一、SpringApplication构造方法解析 1. web应用类型 2. BootstrapRegistryInitializer 3. ApplicationContextInitializer 4. ApplicationListener 5. 推断Main方法所在类 二、SpringApplication.run(String... args)方法解析 1.创建DefaultBootstrapContext 2.获…

订单超时自动取消的实践方案

1、定时任务方案 方案流程&#xff1a; 每隔 30 秒查询数据库&#xff0c;取出最近的 N 条未支付的订单。 遍历查询出来的订单列表&#xff0c;判断当前时间减去订单的创建时间是否超过了支付超时时间&#xff0c;如果超时则对该订单执行取消操作。 定时任务方案工程实现相…

基于AC-YOLO的路面落叶检测方法

基于AC-YOLO的路面落叶检测方法 A Road Leaf Detection Method based on AC-YOLO 完整下载链接:基于AC-YOLO的路面落叶检测方法 文章目录 基于AC-YOLO的路面落叶检测方法摘要第一章 引言1.1 研究背景1.2 研究意义1.3 相关工作 第二章 AC-YOLO算法介绍2.1 目标检测技术综述2.2…

【Vue】vue中将 html 或者 md 导出为 word 文档

原博主 xh-htmlword文档 感谢这位大佬的封装优化和分享&#xff0c;亲测有用&#xff01;可以去看大佬&#x1f447;的说明&#xff01; 前端HTML转word文档&#xff0c;绝对有效&#xff01;&#xff01;&#xff01; 安装 npm install xh-htmlword导入 import handleEx…

远动通讯屏的作用

远动通讯屏的作用 远动通讯屏有时有称为调度数据网柜&#xff0c;远动通讯屏具体干啥作用&#xff1f;远动通讯屏是以计算机为基础的生产过程与调度自动化系统&#xff0c;可以对现场的运行设备进行监视和控制、以实现数据采集、设备测量、参数调节以及各类信号报警等各项功能。…

Spring MVC、Boot、Cloud:一站式对比与解析

Spring MVC、Boot、Cloud&#xff1a;一站式对比与解析 文章目录 Spring MVC、Boot、Cloud&#xff1a;一站式对比与解析一、SpringMVC二、SpringBoot三、SpringCloud四、从多个方面看1、定位和功能&#xff1a;2、依赖管理&#xff1a;3、开发效率&#xff1a;4、项目结构和维…

git--.gitignore--使用/详解/实例

简介 本文介绍git的.gitignore忽略文件的用法。 项目中并不是所有文件都需要保存到版本库中的&#xff0c;例如“target”目录及目录下的文件就可以忽略。 忽略某个文件&#xff08;不提交到版本库的方法&#xff09;&#xff1a;在Git工作区的根目录下创建一个.gitignore文件…

上海市计算机学会竞赛平台2022年4月月赛丙组闰年的判定

题目描述 给定一个正整数 &#x1d466;y 表示一个年份&#xff0c;请判定 &#x1d466;y 年是否为闰年&#xff0c;闰年分普通闰年与世纪闰年&#xff1a; 普通闰年的年份是 44 的倍数&#xff0c;但不能是 100100 的倍数&#xff1b;世纪闰年的年份是 400400 的倍数。 输…

用webui.sh安装报错No module named ‘importlib.metadata‘

安装sdweb报错&#xff0c;出现No module named importlib.metadata&#xff1a; glibc version is 2.35 Cannot locate TCMalloc. Do you have tcmalloc or google-perftool installed on your system? (improves CPU memory usage) Traceback (most recent call last):File…

Pytorch实现扩散模型【DDPM代码解读篇2】

扩散的代码实现 本文承接 Pytorch实现扩散模型【DDPM代码解读篇1】http://t.csdnimg.cn/aDK0A 主要介绍“扩散是如何实现的”。代码逻辑清晰&#xff0c;可快速上手学习。 # 扩散的代码实现 # 扩散过程是训练部分的模型。它打开了一个采样接口&#xff0c;允许我们使用已经…