当前位置: 首页 > 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…...

Dell R730 2U服务器实战:解锁Nvidia P4计算卡在虚拟化环境下的AI训练潜能

1. 硬件准备与安装避坑指南 Dell PowerEdge R730作为一款经典的2U机架式服务器&#xff0c;在二手市场上性价比极高。我最近给实验室淘了两台二手R730&#xff0c;准备搭建AI训练集群。这次重点分享如何在这台服务器上安装Nvidia Tesla P4计算卡的经验。 先说说为什么选P4这张卡…...

图片换背景在线制作怎么操作?一文解析2026年最好用的免费工具

你是不是也遇到过这样的困境&#xff1a;拍了张不错的证件照&#xff0c;但背景不够专业&#xff1b;电商要上新产品图&#xff0c;需要统一的白色背景&#xff1b;或者就是想给朋友圈的照片换个背景图&#xff0c;结果却卡在了怎么处理上&#xff1f;其实&#xff0c;图片换背…...

06-AI产品的伦理边界-当上瘾设计遇上算法合规(系列二-上瘾模型的AI重构)

AI产品的伦理边界&#xff1a;当上瘾设计遇上算法合规本文是「上瘾模型的AI重构」系列的第6篇&#xff08;系列收官&#xff09;本文你将获得 &#x1f9e0; 上瘾设计的伦理困境全景&#x1f4d0; AI放大伦理风险的5个维度&#x1f4ca; “设计上瘾” vs "设计价值"的…...

gomicro如何安装部暑

根据最新官方文档&#xff0c;以下是 go-micro&#xff08;v5 最新版&#xff09; 的完整安装与部署指南。目前最新稳定版本为 v5.16.0&#xff0c;推荐使用特定版本号安装以避免模块路径冲突。---一、环境准备 要求 说明 Go Go 1.21&#xff08;建议最新版&#xff09; …...

终极Windows 11优化指南:使用Win11Debloat开源工具提升系统性能的完整方案

终极Windows 11优化指南&#xff1a;使用Win11Debloat开源工具提升系统性能的完整方案 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes …...

在模型广场中根据任务需求与预算选择合适的模型

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 在模型广场中根据任务需求与预算选择合适的模型 面对文本生成、代码编写、逻辑推理等多样化的任务&#xff0c;开发者常常需要从众…...

手把手教你用STM32CubeMX配置PWM驱动DRV8833模块,轻松搞定智能小车调速

基于STM32CubeMX的DRV8833电机驱动开发实战 在嵌入式开发领域&#xff0c;电机控制一直是热门且实用的技术方向。无论是智能小车、机器人还是工业自动化设备&#xff0c;精准的电机调速都是核心需求。传统开发方式需要手动配置大量寄存器&#xff0c;不仅耗时耗力&#xff0c;还…...

Gemini3.1Pro数据分析报告自动化实战

用 Gemini 3.1 Pro 快速生成数据分析报告并自动可视化&#xff1a;端到端闭环&#xff08;生成—验证—反思—修正—回归&#xff09; 门控降级 4周MVP路线图要“快速生成数据分析报告并可视化”&#xff0c;真正难点不是生成文字&#xff0c;而是把报告做成可核验、可复用、可…...

Spider2-V:多模态AI智能体框架,连接LLM与GUI自动化的工程实践

1. 项目概述&#xff1a;一个面向开发者的多模态智能体框架 最近在AI应用开发圈子里&#xff0c;一个名为“Spider2-V”的项目引起了我的注意。它不是一个简单的聊天机器人&#xff0c;也不是一个孤立的图像识别模型&#xff0c;而是一个旨在将大型语言模型&#xff08;LLM&…...

紧急通知:NotebookLM v2.3将移除手动标签覆盖功能!立即执行这5项存量标签加固操作,否则知识链永久断裂

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM标签管理方法 NotebookLM 原生不提供显式的“标签&#xff08;Tags&#xff09;”UI 控件&#xff0c;但可通过其底层的 source 元数据机制实现语义化标签管理。核心思路是将标签作为自定义…...