C++进阶编程 --- 2.初始STL

文章目录

    • 第二章:
      • 2.STL
        • 2.1 STL诞生
        • 2.2 STL基本概念
        • 2.3 STL六大组件
        • 2.4 STL容器、算法、迭代器
        • 2.5 容器算法迭代器
          • 2.5.1 vector存放内置数据类型
          • 2.5.2 vector存放自定义数据类型
          • 2.5.3 vector容器嵌套容器

第二章:

2.STL

2.1 STL诞生
  • 对了建立数据结构和算法的一套标准,诞生了STL
2.2 STL基本概念
  • STL(Standard Template Library)标准模板库

  • 从广义分为:容器(container)、算法(algorithm)、迭代器(iterator)

  • 容器与算法之间通过迭代器进行连接

2.3 STL六大组件
  • 容器:各种数据结构,如vector、list、deque、set、map等,用来存放数据

  • 算法:各种常用算法,如sort、find、copy、for_each等

  • 迭代器:容器与算法之间的桥梁

  • 仿函数:可作为算法的某种策略

  • 适配器:一种用来修饰容器或仿函数或迭代接口的东西

  • 空间配置器:负责空间的配置与管理

2.4 STL容器、算法、迭代器

容器:置物

容器分为两种

  1. 序列式容器:强调值之间的排序关系,序列时容器中每个元素都有固定的位置

  2. 关联式容器:二叉树结构,各元素之间没有严格的物理上的顺序关系

算法:问题解法

算法分为两种

  1. 质变算法:运算过程中会更改区间内的元素内容,如拷贝、替换、删除等操作

  2. 非质变算法:运算过程中不会更改区间内的元素内容,如查找、计数、寻找极值等操作

迭代器:提供一种方法,使其能够依序寻访某个容器中所含的各个元素,而又无需暴露该容器的内部表示方法,每个容器都有自己的专属迭代器。

迭代器种类

种类功能支持运算
输入迭代器对数据只读访问只读,支持++ 、==、 !=
输出迭代器对数据只写访问只写,支持++
前向迭代器读写操作,并能向前推进迭代器读写,支持++、==、!=
双向迭代器读写操作,并能向前和向后操作读写,支持++,–
随机访问迭代器读写操作,可跳跃的方式访问任意数据,功能最强读写,支持++、–、[n]、-n、<、<=、>、>=
2.5 容器算法迭代器
2.5.1 vector存放内置数据类型

容器:vector

算法:for_each

迭代器:

vector<int>::iterator
#include <iostream>
using namespace std;
#include <vector>    //使用容器vector需包含该头文件
#include <algorithm> //使用for_each需包含该算法头文件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);v.push_back(50);//通过迭代器访问vector<int>::iterator itBegin = v.begin(); //起始迭代器,指向容器第一个元素vector<int>::iterator itEnd = v.end();     //结束迭代器,指向容器最后一个元素的下一个位置//方式1 遍历 - whilewhile (itBegin != itEnd){cout << *itBegin << endl;itBegin++;}//方式2 遍历 - forfor (vector<int>::iterator it = v.begin(); it != v.end(); it++){cout << *it << endl;}//方式3 遍历 - STL提供遍历算法for_each(v.begin(), v.end(), myPrint);}int main()
{test01();system("pause");return 0;
} 
2.5.2 vector存放自定义数据类型
#include <iostream>
using namespace std;
#include <string>
#include <vector>class Student  //自定义数据类型
{
public:Student(string name, int age){this->m_Name = name;this->m_Age = age;}string m_Name;int m_Age;
};void test01()
{vector<Student> v;Student s1("小明", 20);Student s2("小红", 21);Student s3("小李", 18);Student s4("小王", 19);Student s5("小刘", 22);v.push_back(s1);v.push_back(s2);v.push_back(s3);v.push_back(s4);v.push_back(s5);for (vector<Student>::iterator it = v.begin(); it != v.end(); it++){//cout << "姓名:" << (*it).m_Name << " 年龄:" << (*it).m_Age << endl;cout << "姓名:" << it->m_Name << " 年龄:" << it->m_Age << endl;}
}void test02() //自定义数据类型 - 指针
{vector<Student*> v;Student s1("小明", 20);Student s2("小红", 21);Student s3("小李", 18);Student s4("小王", 19);Student s5("小刘", 22);v.push_back(&s1);v.push_back(&s2);v.push_back(&s3);v.push_back(&s4);v.push_back(&s5);for (vector<Student*>::iterator it = v.begin(); it != v.end(); it++){//cout << "姓名:" << (*it).m_Name << " 年龄:" << (*it).m_Age << endl;cout << "姓名:" << (*it)->m_Name << " 年龄:" << (*it)->m_Age << endl;}
}int main()
{test01();test02();system("pause");return 0;
}
2.5.3 vector容器嵌套容器
#include <iostream>
using namespace std;
#include <vector>void test01()
{vector<vector<int>> v; vector<int> v1;vector<int> v2;vector<int> v3;vector<int> v4;vector<int> v5;for (int i = 0; i < 5; i++){v1.push_back(i + 1);v2.push_back(i + 2);v3.push_back(i + 3);v4.push_back(i + 4);v5.push_back(i + 5);}v.push_back(v1);v.push_back(v2);v.push_back(v3);v.push_back(v4);v.push_back(v5);for (vector<vector<int>>::iterator it = v.begin(); it != v.end(); it++){for (vector<int>::iterator itBegin = (*it).begin(); itBegin != (*it).end(); itBegin++){cout << *itBegin << " ";}cout << endl;}}int main()
{test01();system("pause");return 0;
}

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

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

相关文章

使用hexo框架快速在github上搭建静态博客

今天来说一下使用hexo框架搭建静态博客&#xff0c;玩玩还不错。 我的操作系统 文章目录 一、部署到本地二、新建博客三、更换主题四、部署到github五、其他 一、部署到本地 首先下载好nodejs和git工具&#xff0c;建议直接去清华镜像源下载 node.js git 这中间环境变量的配置…

【精品方案】智慧金融大数据分析平台总体架构方案

以下是部分PPT内容&#xff0c;请您参阅。如需下载完整PPTX文件&#xff0c;请前往星球获取&#xff1a; 1.实现数据共享 通过数据平台实现数据集中&#xff0c;确保金融集团各级部门均可在保证数据隐私和安全的前提下使用数据&#xff0c;充分发挥数据作为企业重要资产的业务价…

linux期末知识点总结

Linux操作系统不仅是技术爱好者的热门选择&#xff0c;也是许多IT专业人士必备的技能。随着期末的临近&#xff0c;了解并掌握Linux的关键知识点对于顺利通过考试至关重要。本文将对Linux操作系统的主要知识点进行总结&#xff0c;帮助你巩固学习成果&#xff0c;顺利应对期末考…

milvus knowhere源码编译测试

简介 Knowhere 是 Milvus 的核心向量执行引擎&#xff0c;集成了Faiss、Hnswlib和Annoy等多个向量相似度搜索库。 编译环境 操作系统: Ubuntu 22.04.4 gcc/g:11.4.0 cmake: 3.27.7 安装依赖 apt install build-essential libopenblas-dev libaio-dev python3-dev python…

c语言例题,计算字符串长度,递归思想

c语言中&#xff0c;计算字符串长度算是一个比较经典的题了&#xff0c;而今天我们运用两种不同的求解方法来写出不同的程序来实现计算字符串的功能。 主函数 先看到主函数&#xff0c;主函数中设置了一串7个字符的字符串&#xff0c;而后面接下来定义了两个变量len1和len2&am…

Chatopera 云服务的智能问答引擎实现原理,如何融合 #聊天机器人 技术 #Chatbot #AI #NLP

观看视频 Bilibili: https://www.bilibili.com/video/BV1pZ421q7EH/YouTube: https://www.youtube.com/watch?vx0d1_0HQa8o 内容大纲 提前在浏览器打开网址&#xff1a; Chatopera 云服务&#xff1a;https://bot.chatopera.comChatopera 入门教程&#xff1a;https://dwz…

Spring Boot与Redis深度整合:实战指南

Spring Boot 整合 Redis 相当简单&#xff0c;它利用了 Spring Data Redis 项目&#xff0c;使得我们可以在 Spring Boot 应用中轻松地操作 Redis。以下是如何整合 Redis 到 Spring Boot 应用的基本步骤&#xff1a; 1. 添加依赖 首先&#xff0c;在你的 pom.xml 文件中添加 …

银狐再起风波:2024税务抽查引战勒索风暴

近日&#xff0c;在日常网络狩猎过程中&#xff0c;亚信安全威胁情报中心的研究专家偶然发现了一个团伙&#xff0c;该团伙不仅在QQ群内散播钓鱼链接&#xff0c;还通过伪造的下载网站推广含有恶意软件的EXE文件。面对这一明显的威胁传播行为&#xff0c;该专家迅速组织了威胁情…

Vue2/Vue3 -------- 生命周期/钩子函数

&#xff08;1&#xff09;beforeCreate 钩子函数&#xff0c;在实例初始化之后&#xff0c;在数据监听和事件配置之前触发。因此在这个事件中我们是获取不到 data 数据的。 &#xff08;2&#xff09;created 钩子函数&#xff0c;在实例创建完成后触发&#xff0c;此时可以访…

个人偏好测验,职业倾向分析和HR人才测评量表

个人偏好测验&#xff0c;以人的15种需求为理论基础&#xff0c;用来鉴别我们在这15个维度的倾向&#xff0c;从而为分析人格特征、职业倾向提供依据。15种需求理论最早由美国心理学家murray在1938年提出。 个人偏好测验&#xff0c;也叫个人爱好测试&#xff0c;人的需求因子…

网络体系结构概述

目录 1. OSI/RM参考模型1.1. 物理层1.2. 数据链路层1.3. 网络层1.4. 传输层1.5. 会话层1.6. 表示层1.7. 应用层 2. TCP/IP参考模型3. 理解OSI七层模型 网络体系结构是线代网络技术的整体蓝图。 1. OSI/RM参考模型 开放互联参考模型&#xff08;Open System Interconnection/…

备考ICA----Istio实验12---配置双向TLS Istio Ingress Gateway实验

备考ICA----Istio实验12—配置双向TLS Istio Ingress Gateway实验 本实验部分配置延续上个Istio实验11 1. 重新配置secret 重新配置secret使其带有ca证书可以验证客户端证书是否合法 先删除原有secret,再配置新的secret # 删除原tls类型的secret kubectl -n istio-system d…

数据仓库——事实表

数据仓库基础笔记思维导图已经整理完毕&#xff0c;完整连接为&#xff1a; 数据仓库基础知识笔记思维导图 事实表 事务事实表 事务事实表用于跟踪事件&#xff0c;通过存储事实和与之关联的维度细节&#xff0c;允许单独或聚集地研究行为。粒度稀疏性包含可加事实 无事实的…

【Django开发】0到1美多商城项目md教程第4篇:图形验证码,1. 图形验证码接口设计【附代码文档】

美多商城完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;欢迎来到美多商城&#xff01;&#xff0c;项目准备。展示用户注册页面&#xff0c;创建用户模块子应用。用户注册业务实现&#xff0c;用户注册前端逻辑。图形验证码&#xff0c;图形验证码接口设…

Java基础知识总结(32)

反射 类加载器 当JVM启动时&#xff0c;会形成由3个类加载器组成的初始类加载器层次结构。 Bootstrap ClassLoader&#xff1a;根类加载器。它负责加载Java的核心类。 Extension ClassLoader&#xff1a;扩展类加载器。它负责加载 JRE 的扩展目录&#xff08;%JAVA_HOME%/jr…

网安基础2-Sniffer的使用与防范

1. 嗅探器sniffer的工作原理 能捕获经过该网络设备的报文&#xff0c;通过分析网络流量&#xff0c;找出关键信息&#xff0c;解决网络问题。 不同于键盘捕获程序&#xff0c;如keylogger利用中断或钩子技术&#xff0c;Sniffer将网络接口置成适当的模式&#xff0c;如杂收。…

【小黑送书—第十八期】>>让工作自动化起来!无所不能的Python(文末送书)

随着我国企业数字化和信息化的深入&#xff0c;企业对办公自动化的效率和灵活性要求越来越高。Python作为一种开源的软件应用开发方式&#xff0c;通过提供强大丰富的库文件包&#xff0c;极大地简化了应用开发过程&#xff0c;降低了技术门槛。Python开发有哪些优势、挑战以及…

搭建vite+vue3项目时遇到的问题

搭建项目(vitevue3) 第一步:先安装开发工具 下载node.js https://nodejs.cn/download/ node自带npm 可通过npm -v /node -v查看npm和node是否安装成功以及版本号 以及查看vue/cli是否安装 第二步:创建项目(使用vite) 下载vite: npm install -g create-vite 创建项目:create-v…

产品经理的进阶之路

点击下载《产品经理的进阶之路》 1. 前言 本文深入剖析了产品经理这一职业从产品专员起步,逐步晋升为产品经理、高级产品经理,直至产品总监的整个职业发展路径。在每个阶段,产品经理都需承担不同的工作职责,展现出独特的职业特点。 2. 产品专员 关键词【产品需求/原型/文…

栈和队列相关

栈的顺序存储结构 #define maxsize 50 typedef int ElemType; typedef struct {ElemType data[maxsize];int top; }SqStack; 顺序栈的基本算法 初始化栈 void InitStack(SqStack *s){s.top-1;return; } 判断栈空 bool IsEmptyStack(SqStack *s){if(s.top-1){return true;…