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

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…

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;如果超时则对该订单执行取消操作。 定时任务方案工程实现相…

【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;可以对现场的运行设备进行监视和控制、以实现数据采集、设备测量、参数调节以及各类信号报警等各项功能。…

用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…

堆的基本操作(c语言实现)

1.堆的基本操作 1.1定义堆 typedef int HPDataType;//堆中存储数据的类型typedef struct Heap {HPDataType* a;//用于存储数据的数组int size;//记录堆中已有元素个数int capacity;//记录堆的容量 }HP;1.2初始化堆 然后我们需要一个初始化函数&#xff0c;对刚创建的堆进行初…

【C语言】路漫漫其修远兮,深入[指针]正当下

一. 指针初步 1.概念定义 地址&#xff1a;我们在内存中开辟空间时&#xff0c;为了方便后续访问&#xff0c;每个数据有确切的地址。 指针&#xff1a;指向数据的地址&#xff0c;并将其地址储存在指针变量中。 2.基本运算符 • 取地址操作符&#xff08;&&#xff09; …

【强化学习入门】基于DDPG的强化学习控制器设计

最近在看控制领域研究热门–强化学习相关的东西&#xff0c;跟着matlab官方强化学习教程一边看一边学&#xff0c;感觉入门门槛略高&#xff0c;需要补很多机器学习相关的知识&#xff0c;高数概率论那些&#xff0c;摸索了个把月感觉现在只大概会用&#xff0c;原理啥的还没搞…

进口家装水管十大品牌哪家好,弗锐德为您推荐进口家装水管领先十大品牌

水管作为家装隐蔽工程之一&#xff0c;选对一款优质的水管是至关重要的&#xff0c;毕竟好的水管能够保证家庭后续几十年的用水安全和健康。今天&#xff0c;小编就和大家说说进口家装水管十大品牌哪家好&#xff1f; 目前国内进口家装水管具有知名度和消费者认可的品牌有&…

自制一个3D打印的移动终端——T3rminal

T3rminal是我过去几个月一直在努力开发的一个CyberDeck&#xff0c;并希望将其开源。 我从不同设备如Decktility、YARH和其他项目中获得了灵感。 你可以在我的Github上协助并关注该项目&#xff1a;https://github.com/crazycaleb2008/T3rminal/tree/main/3D%20Models 材料 …

Edge的使用心得和深度探索-Sider: ChatGPT 侧边栏

作为一款备受欢迎的网络浏览器&#xff0c;Microsoft Edge在用户体验和功能方面都有着诸多优势。在长期的使用中&#xff0c;我总结出了三条使用心得&#xff0c;同时也发现了三个能够极大提高效率的功能。让我们一起深度探索Edge的潜力吧&#xff01; 使用心得&#xff1a; 界…

Spring 常用的注入方式有什么?

Spring 是一个非常流行的 Java 开发框架&#xff0c;它提供了多种依赖注入&#xff08;Dependency Injection&#xff09;的方式&#xff0c;使得开发者可以轻松地管理应用程序中的组件依赖关系。在 Spring 中&#xff0c;常用的注入方式主要包括构造器注入、Setter 方法注入、…