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

C++基础知识学习记录—模版和泛型编程

1、模板

概念:

模板可以让类或者函数支持一种通用类型,在编写时不指定固定的类型,在运行时才决定是什么类型,理论上讲可以支持任何类型,提高了代码的重用性

模板可以让程序员专注于内部算法而忽略具体类型,是泛型编程的基础。

模板通常由两种实现方式:

  • 函数模板

函数模板可以使一个函数支持任意数据类型。

  • 类模板

类模板可以使一个类内部支持任意数据类型。

1、函数模板

1、tempplate 定义模板的关键字

typename 和 class意义相同,后面跟的变量参数,代表任意类型

一般地,typename常用于函数模版,class常用于类模版

2、类模板

类模板的注意:

类模板不支持自动类型推导,创建对象的同时,需指明实际的参数类型

2、容器

1、泛型编程

泛型编程提出的目的是:发明一种语言机制,能够实现一个标准的容器库(标准模板库 STL),标准容器库可以做到编写一般化的算法,来支持不同的数据类型。例如模板的应用就是泛型编程的基础。

2、标准模板库(STL)

标准模板库(Standard Template Library,STL)是惠普实验室开发的一系列软件的统称。虽说它主要表出现到C++中,但在被引入C++之前该技术就已经存在了很长时间。

STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和 iterator(迭代器),几乎所有的代码都采用了模板类和模板函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。

● 算法: 例如:swap交换变量函数 sort排序

● 容器 :存放数据的类模板

● 迭代器:指示元素位置。方便算法访问操作容器

3、容器

相关概念:

1、容器是用来存储数据的集合,数据元素可以是任何类型。

2、容器类只能使用栈内存,不能使用new和delete关键字。

3、容器类的使用需要引入对应的头文件。

 

容器分为:顺序容器 和 关联容器

  • 顺序容器: 元素之间顺序关系,元素有固定位置,典型的代表有Array数组、vector向量、list列表、deque队列
  • 关联容器: 元素之间没有严格物理上的顺序关系,内部会做相应排序,典型的代表,map键值对, mulitmap多重键值对

4、顺序容器

1、数组 array

array是C++11新增的数组类型,与传统数组相比更加安全、易于使用

2、向量 vector

vector向量容器是一种支持高效的随机访问高效尾部插入新元素的容器

向量容器内部由数组实现,比较适合随机存取和尾部插入操作,不适合删除和随机插入操作

3、列表 list

list列表内部是由双链表实现,内存空间不连续,不支持下标,可以高效的进行插入和删除操作,不支持随机访问。vector向量的方法在list双向链表里同样适用,但注意。list不可以通过[]和at方法访问

4、队列 deque

deque几乎支持所有vector和list的API,性能位于二者之间

5、关联容器

map容器

关联容器在内部其实是有序的,但是在外部使用时不能认为其有顺序

 

1、map容器里的元素都是一组键值对,键值对的键(key)是唯一的,通常是string类型,键值对的值(value)可以是任意类型。

2、键值对用关键字pair创建,若干个键值对组成一个map容器。

3、键值对有两种创建方式:

  • pair p1 (key1,value1);
  • pair p2 = make_pair(key2,value2);

4、map的创建方式:

map <string,int> mp1;

6、迭代器

1、迭代器是一个特殊的指针,主要用于容器的元素读写以及遍历。

2、如果使用迭代器不进行修改操作,建议使用只读迭代器const_iterator,反之则使用iterator。

3、迭代器是最高效的遍历方式

相关文章:

  • Three.js 快速入门教程【一】开启你的 3D Web 开发之旅
  • Redis_基础
  • C语言(结构体)
  • unity学习47:寻路和导航,unity2022后版本如何使用 Navmesh 和 bake
  • Java基础——代理模式
  • 【优先级队列】任务分配
  • sentinel集成nacos做持久化配置
  • rk3576上部署deepseek
  • systemverilog刷题小记
  • CodeGPT 使用教程(适用于 VSCode)
  • Kafka 简介
  • 波导阵列天线 学习笔记9 使用紧凑高效率馈网的宽带圆极化阵列天线
  • 【面试题】2025.02.19-前端面试题汇总
  • 图论(四):图的中心性——度中心性介数中心性紧密中心性
  • 学习总结2.19
  • 【小白学HTML5】一文讲清常用单位(px、em、rem、%、vw、vh)
  • “深入浅出”系列之C++:(24)ZeroMQ库
  • 炫酷动效登录页
  • DeepSeek学术指南:DeepSeek在文献综述中的能力分享!
  • 练习题 - DRF 3.x Parsers 解析器使用示例和配置方法
  • 鄂州:锁死中小学教师编制总量,核减小学编制五百名增至初中
  • 云南多地突查公职人员违规饮酒:公安局门口开展酒精吹气测试
  • 综艺还有怎样的新可能?挖掘小众文化领域
  • 印巴开始互袭军事目标,专家:冲突“螺旋式升级”后果或不可控
  • 黑灰产工作室为境外诈骗集团养号引流,冒充美女与男性裸聊后敲诈勒索
  • 印巴战火LIVE丨“快速接近战争状态”:印度袭击巴军事基地,巴启动反制军事行动