当前位置: 首页 > news >正文

C++STL基础

STL基础

  • 诞生
    • cpp的面向对象和泛型编程的思想本质就是提高复用性
    • 诞生了STL库
  • 基本概念
    • STL标准模板库
    • STL从广义上分为容器、算法及迭代器
    • 容器和算法之间通过迭代器进行连接
    • STL几乎所有的代码都采用了模板类或者模板函数
  • 基本组件
    • 容器、算法、迭代器、仿函数、适配器、空间配置器
    • 容器
      • 各类数据结构
    • 算法
      • 各类常用算法
    • 迭代器
      • 容器和算法的胶合剂
    • 仿函数
      • 行为类似函数,可作为算法的某种策略
    • 适配器
      • 一种用来修饰容器或者迭代器接口的东西
    • 空间配置器
      • 负责空间的配置与管理
  • STL中容器、算法、迭代器
    • 容器就是运用最广泛的一些数据结构实现出来
    • 分类
      • 序列式容器
        • 强调值的排序,序列式容器中的每个元素均有固定的位置
      • 关联式容器
        • 二叉树结构,各元素之间没有严格的物理上的顺序关系
    • 算法
      • 质变算法—增删改
      • 非质变算法—查找遍历
    • 迭代器—可以初步认为是一种指针
      • 提供一种方法,使之能够依序寻访某个容器所含的各个元素
      • 每种容器都有特定的迭代器
      • 常用—双向迭代器和随机访问迭代器
  • vector
    • 存放内置数据类型
      • 容器—vector
      • 算法—for_each
      • 迭代器—vector<数据类型>::iterator
      • 简单举例
          #include<iostream>#include<string>#include<vector>#include<algorithm>using namespace std;//手写遍历过程void test1(void){//创建一个vector容器vector<int> v;//向容器中插入数据v.push_back(10);//尾插法v.push_back(20);//通过迭代器访问容器中的数据for(vector<int>::iterator vi = v.begin(); vi != v.end(); vi++){cout << *vi << endl;}}//采用STL标准库void Myprint(int val){cout<< val << endl;}void test2(void){vector<int> v;v.push_back(20);v.push_back(21);for_each(v.begin(), v.end(), Myprint);//回调技术}int main(){test1();test2();return 0;}
      
  • 存放自定义数据类型
  #include<iostream>#include<string>#include<vector>#include<algorithm>using namespace std;class Person{public:Person(string name, int age){this->m_age = age;this->m_name = name;}string m_name;int m_age;};void test1(void){vector<Person*> v_p;Person p1("p1", 10);Person p2("p2", 20);v_p.push_back(&p1);v_p.push_back(&p2);for(vector<Person*>::iterator it= v_p.begin(); it != v_p.end(); it++){cout << "my name is " << (*it)->m_name << " my age is " << (*it)->m_age << endl;}}int main(){test1();return 0;}
  • 容器中嵌套容器
  #include<iostream>#include<string>#include<vector>#include<algorithm>using namespace std;void test1(void){vector<vector<int> > v;vector<int> v_1;vector<int> v_2;for(int i = 0; i < 3; i++){v_1.push_back(i+1);v_2.push_back(i+2);}v.push_back(v_1);v.push_back(v_2);for(vector< vector<int> >::iterator v_o = v.begin(); v_o != v.end(); v_o++){//*v_o---是vector<int>类型---依然是一个指针for(vector<int>::iterator v_i = (*v_o).begin(); v_i != (*v_o).end(); v_i++){cout << *v_i << endl;}}}int main(){test1();return 0;}

相关文章:

C++STL基础

STL基础 诞生 cpp的面向对象和泛型编程的思想本质就是提高复用性诞生了STL库 基本概念 STL标准模板库STL从广义上分为容器、算法及迭代器容器和算法之间通过迭代器进行连接STL几乎所有的代码都采用了模板类或者模板函数 基本组件 容器、算法、迭代器、仿函数、适配器、空间配置…...

数学建模经验【更新中】

数学建模简单入门 一、 分工 3人&#xff0c;1人论文&#xff0c;1人代码主力&#xff0c;1人论文代码&#xff08;前一半时间主代码&#xff0c;后一半时间主论文&#xff09; Tips: 不养闲人&#xff0c;论文必须要在对代码和题目极其了解并且能跟上队友思路的情况下才能写…...

【python学习笔记】:Excel 数据的封装函数

对比其它编程语言&#xff0c;我们都知道Python最大的优势是代码简单&#xff0c;有丰富的第三方开源库供开发者使用。伴随着近几年数据分析的热度&#xff0c;Python也成为最受欢迎的编程语言之一。而对于数据的读取和存储&#xff0c;对于普通人来讲&#xff0c;除了数据库之…...

如何获取或设置CANoe以太网网卡信息(GET篇)

CAPL提供了一系列函数用来操作CANoe网卡。但是,但是,首先需要明确一点,不管是获取网卡信息,还是设置网卡信息,只能访问CAPL程序所在的节点下的网卡,而不是节点所在的以太网通道下的所有网卡 关于第一张图中,Class节点下,有三个网卡:Ethernet1、VLAN 1.100、VLAN 1.200…...

“终于我从字节离职了...“一个年薪50W的测试工程师的自白...

我递上了我的辞职信&#xff0c;不是因为公司给的不多&#xff0c;也不是因为公司待我不好&#xff0c;但是我觉得&#xff0c;我每天看中我憔悴的面容&#xff0c;每天晚上拖着疲惫的身体躺在床上&#xff0c;我都不知道人生的意义&#xff0c;是赚钱吗&#xff1f;是为了更好…...

【Spring】八种常见Bean加载方式

&#x1f6a9;本文已收录至专栏&#xff1a;Spring家族学习 一.引入 (1) 概述 ​ 关于bean的加载方式&#xff0c;spring提供了各种各样的形式。因为spring管理bean整体上来说就是由spring维护对象的生命周期&#xff0c;所以bean的加载可以从大的方面划分成2种形式&#xff…...

第五回:样式色彩秀芳华

import matplotlib as mpl import matplotlib.pyplot as plt import numpy as np第五回详细介绍matplotlib中样式和颜色的使用&#xff0c;绘图样式和颜色是丰富可视化图表的重要手段&#xff0c;因此熟练掌握本章可以让可视化图表变得更美观&#xff0c;突出重点和凸显艺术性。…...

关于@Test单元测试

1、关于doReturndoReturn(new Test()).when(testService).updateStatusByLock(any(), any());在单元测试里这个方法可以执行到这里之间跳过不去执行&#xff0c;返回你想要的返回值2、关于givengiven(user.getName(any())).willReturn("张三");在单元测试里这个方法 …...

【项目实战】WebFlux整合r2dbc-mysql实战

一、背景 Webflux虽然是响应式的,但是没办法,JDBC是基于阻塞IO实现的,所以无法真正的威力发挥不出来。 但是,Webflux一旦整合了R2DBC之后,那么它将不再受限于数据库连接了,真正打通了响应式应用的任督二脉,性能才被释放。 当然,除了Spring推出的R2DBC协议,还有Orac…...

go版本分布式锁redsync使用教程

redsync使用教程前言redsync结构Pool结构Mutex结构acquire加锁操作release解锁操作redsync包的使用前言 在编程语言中锁可以理解为一个变量&#xff0c;该变量在同一时刻只能有一个线程拥有&#xff0c;以便保护共享数据在同一时刻只有一个线程去操作。对于高可用的分布式锁应…...

大数据之Hudi数据湖_大数据治理_简介_发展历史_特性_应用场景---大数据之Hudi数据湖工作笔记0001

支持hive spark flink 美国公司开发的~ 都在使用,这些企业都在用 支持hadoop的,更新,插入,删除 和数据增量处理 支持流式数据处理. hive是离线数仓 hive不支持事物 insert overwrite 底层后来通过这种方式支持了事物 insert overwrite处理数据很低效,因为更新是基于覆盖实现…...

射频功率放大器基于纵向导波的杆状构件腐蚀诊断方法的研究

实验名称&#xff1a;基于纵向导波的杆状构件腐蚀诊断方法研究方向&#xff1a;无损探伤测试设备&#xff1a;信号号发生器、安泰ATA-8202功率放大器、数据采集卡、直流电源、超声探头、钢杆、前置放大器。实验过程&#xff1a;图&#xff1a;试验装置试验装置如图3.2所示。监测…...

Leedcode 二分查找 理解1

一个up的理解 一、二分查找基础例题 力扣https://leetcode.cn/problems/binary-search/ 二、二分查找模板问题 带搜索区间分为3个部分&#xff1a; 1、[mid]&#xff0c;直接返回 2、[left&#xff0c;mid-1]&#xff0c;设置边界right mid - 1 3、[mid1,right]&#x…...

【告别篇】大家好,再见了,我转行了,在筹备创业

前言 相信大家也一直看到我的博客没有更新过了&#xff0c;我其实很久没有打开过博客了&#xff0c;也就意味着我很长一段时间都在停滞不前&#xff0c;没有了学习的动力。 现在我上来是想跟大家告个别 &#xff1a; 很多粉丝宝宝的私信我看了&#xff0c;但是没有回&#xf…...

Java——岛屿数量

题目链接 leetcode在线oj题——岛屿数量 题目描述 给你一个由 ‘1’&#xff08;陆地&#xff09;和 ‘0’&#xff08;水&#xff09;组成的的二维网格&#xff0c;请你计算网格中岛屿的数量。 岛屿总是被水包围&#xff0c;并且每座岛屿只能由水平方向和/或竖直方向上相…...

《代码整洁之道》笔记

1章&#xff1a;专业人士要有专业人士素养&#xff0c;要有责任心&#xff0c;编写代码尽可能完善没有bug&#xff0c;有bug也要勇于承担。坚持学习&#xff0c;坚持练习&#xff0c;保证自己的专业技能。谦虚&#xff0c;相互学习&#xff0c;与顾客达成一致2章&#xff1a;说…...

个人网站如何集成QQ快捷登录功能?

目录 一、网站集成QQ快捷登录的好处 二、网站接入QQ快捷登录具体步骤 &#xff08;1&#xff09;登录到QQ互联官网 &#xff08;2&#xff09;进行个人开发者认证 &#xff08;3&#xff09;创建网站应用 &#xff08;4&#xff09;填写网站资料 三、如何在本地开发环境…...

从工厂打螺丝到月薪18k测试工程师,我该满足吗?

以前我比较喜欢小米那句“永远相信美好的事情即将发生”&#xff0c;后来发现如果不努力不可能有美好的事情发生&#xff01;01高中毕业进厂5年&#xff0c;创业经商多次战败&#xff0c;为了生计辗转奔波高中毕业后我就进了工厂&#xff0c;第一份工作是做模具加工。从500元一…...

【相关分析-高阶绘图】MATLAB实现皮尔逊相关分析-散点直方图

虽然皮尔逊相关分析很常见,但如何更好的展现相关性、散点分布、柱状分布,以提升研究结果的美感和冲击感呢?本文拟通过MATLAB绘制包含散点分布、柱状分布、线性展示的散点直方图,有助于审稿人眼前一亮。 1、Pearson相关系数原理 Pearson相关系数(Pearson Correlation Co…...

Spark性能优化二 Shuffle机制分析

&#xff08;一&#xff09; 什么情况下发生shuffle 在MapReduce框架中&#xff0c;Shuffle是连接Map和Reduce之间的桥梁&#xff0c;Map阶段通过shuffle读取数据并输出到对应的Reduce&#xff1b;而Reduce阶段负责从Map端拉取数据并进行计算。在整个shuffle过程中&#xff0c…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...