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(){
	//定义vector
	vector<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 方式二for
	for(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(){
	//定义vector
	vector<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 方式二for
	for(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(){
	//定义vector
	vector< 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 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙开发接口Ability框架:【(AbilityContext)】

AbilityContext AbilityContext是Ability的上下文环境&#xff0c;继承自Context。 AbilityContext模块提供允许访问特定于ability的资源的能力&#xff0c;包括对Ability的启动、停止的设置、获取caller通信接口、拉起弹窗请求用户授权等。 说明&#xff1a; 本模块首批接口…

Midjourney与Stable Diffusion大比拼:AI绘画技术的未来

在当今快速发展的人工智能技术浪潮中&#xff0c;AI绘画软件成为了艺术和技术交汇的新领域。两大巨头——Midjourney和Stable Diffusion&#xff0c;在这一领域中引领风骚&#xff0c;它们以其独特的功能和强大的生成能力&#xff0c;让创作者能够将想象力化为现实。本文将深入…

Shell编程之循环语句之for

一.for循环语句 读取不同的变量值&#xff0c;用来逐个执行同一组命令 for 变量名 in 取值列表 do命令序列 done 示例&#xff1a; 1.计算从1到100所有整数的和 2.提示用户输入一个小于100的整数&#xff0c;并计算从1到该数之间所有整数的和 3.求从1到100所有整数的偶数和…

记忆化搜索专题

前言 如果要记忆化搜索的话&#xff0c;如果数据是10的九次方&#xff0c;我们不可能开一个那么大的数组来存储&#xff0c;所以我们要学会用map来存储 leecode1553 class Solution {unordered_map<int, int> memo; public:int minDays(int n) {if (n < 1) {return n;…

LeetCode-2391. 收集垃圾的最少总时间【数组 字符串 前缀和】

LeetCode-2391. 收集垃圾的最少总时间【数组 字符串 前缀和】 题目描述&#xff1a;解题思路一&#xff1a;处理垃圾和路程单独计算。解题思路二&#xff1a;逆向思维&#xff0c;计算多走的路解题思路三&#xff1a;只记录&#xff0c;当前t需要计算几次 题目描述&#xff1a;…

基于51单片机的遥控开关仿真

基于51单片机的遥控开关设计 &#xff08;仿真&#xff0b;程序&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 本课题研究的是一款遥控开关&#xff0c;采用51单片机进行发射电路与接收电路的设计&#xff0c;发射电路由单片机最小系统及四个按键构成&am…

面试集中营—Seata分布式事务

一、分布式事务 本地事务 在计算机系统中&#xff0c;更多的是通过关系型数据库来控制事务&#xff0c;这是利用数据库本身的事务特性来实现的&#xff0c; 因此叫数据库事务&#xff0c;由于应用主要靠关系数据库来控制事务&#xff0c;而数据库通常和应用在同一个服务器&am…

树莓派python开发

树莓派自带thonny 点亮LED灯 import RPi.GPIO as GPIO import time# 设置GPIO模式为BCM GPIO.setmode(GPIO.BCM)# 设置LED引脚 led_pin 18# 设置LED引脚为输出 GPIO.setup(led_pin, GPIO.OUT)# 点亮LED GPIO.output(led_pin, GPIO.HIGH)# 延时2秒 time.sleep(2)# 关闭LED GPI…

C++——二叉树搜索树

前面写了初阶数据结构——二叉树&#xff1b;本文内容是来对它来进行结尾 目录 一概念 二实现 2.1查找 2.2插入 2.3删除 完整源代码 三二叉树的应用 四二叉搜索树的性能分析 五二叉搜索树相关的面试题 一概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树…

车机HMI:驾驶员小命握在UI设计师手,九大法则必须遵循。

本文给大家列举了九大法则&#xff0c;欢迎评论点赞交流。 在车机HMI设计中&#xff0c;为了降低驾驶员的反应时间并增加驾驶安全性&#xff0c;可以遵循以下UI设计法则&#xff1a; 易读性和可识别性 确保界面上的文本和图标清晰易读&#xff0c;避免使用过小、过于复杂或模…

Servlet讲解

Servlet生命周期 我们只需要继承Servlet接口&#xff0c;查看方法即可看出Servlet的生命周期 import java.io.IOException;import javax.servlet.Servlet; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest…

【RAG 论文】FiD:一种将 retrieved docs 合并输入给 LM 的方法

论文&#xff1a; Leveraging Passage Retrieval with Generative Models for Open Domain Question Answering ⭐⭐⭐⭐ EACL 2021, Facebook AI Research 论文速读 在 RAG 中&#xff0c;如何将检索出的 passages 做聚合并输入到生成模型是一个问题&#xff0c;本文提出了一…

类和对象一(从封装开始讲述)

目录&#xff1a; 一.封装 二.封装扩展之包&#xff0c;自定义包 三.访问限定符 四.static成员 一.封装&#xff1a;封装&#xff1a;将数据和操作数据的方法进行有机结合&#xff0c;隐藏对象的属性和实现细节&#xff0c;仅对外公开接口来和对象进行 交互。面向对象…

Oracle 流stream数据的复制

Oracle 流stream数据的复制 --实验的目的是捕获scott.emp1表的变化&#xff0c;将变化应用到远程数据库scott.emp1表中。 --设置初始化参数 AQ_TM_PROCESSES1 COMPATIBLE9.2.0 LOG_PARALLELISM1 GLOBAL_NAMEStrue JOB_QUEUE_PROCESSES2 --查看数据库的名称&#xff0c;我的为o…

Hadoop-未授权访问-内置配合命令执行RCE

一、Hadoop常见端口及配置文件 Hadoop中有多种端口&#xff0c;这些端口用于不同的服务和通信。以下是Hadoop中常见的端口以及它们的用途&#xff1a; NameNode Web界面端口 (默认: 9870)NameNode 对客户端服务端口 (默认: 8020)Secondary NameNode Web界面端口 (默认: 9868)…

undolog

undolog回滚段 undolog执行的时间&#xff1a;在执行器操作bufferpool之前。 undolog页

1-02-02:虚拟化与容器化Docker环境搭建

1.02.02 虚拟化与容器化Docker环境搭建 一. 虚拟化与容器化技术简介1. 虚拟机环境2. docker环境 二. Docker 架构与隔离机制2.1 Docker 架构2.2 Docker 隔离机制2.3 资源限制2.4 Docker应用场景 三. 实战:Docker在Centos7安装与镜像加速 ❤❤❤3.1 docker安装3.2 设置镜像加速 …

物流单打印机怎么调格式距离,佳易王物流托运单管理系统软件打印单据左边距调节教程

物流单打印机怎么调格式距离&#xff0c;佳易王物流托运单管理系统软件打印单据左边距调节教程 一、前言 以下软件操作教程以&#xff0c;佳易王物流单打印管理软件为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、佳易王物流单管理系统打印…

CMake创建跨平台OpenGL工程(学习笔记)

一、跨平台环境基本配置 1、环境搭建 1&#xff09;linux OpenGL环境搭建参考&#xff1a;ubuntu18.04 OpenGL开发&#xff08;显示YUV&#xff09;_ubuntu opengl-CSDN博客 https://blog.51cto.com/cerana/6433535 本文使用的是QTCreator 2&#xff09;windows下环境搭建…

三. TensorRT基础入门-ONNX注册算子的方法

目录 前言0. 简述1. 执行一下我们的python程序2.转换swin-tiny时候出现的不兼容op的例子3. 当出现导出onnx不成功的时候&#xff0c;我们需要考虑的事情4. unsupported asinh算子5. unsupported deformable conv算子总结参考 前言 自动驾驶之心推出的 《CUDA与TensorRT部署实战…