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

news2025/3/26 16:19:34

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、迭代器是最高效的遍历方式

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

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

相关文章

已解决IDEA无法输入中文问题(亲测有效)

前言 在使用IDEA的时候&#xff0c;比如我们想写个注释&#xff0c;可能不经意间&#xff0c;输入法就无法输入中文了&#xff0c;但是在其他地方打字&#xff0c;输入法仍然能够正常工作。这是什么原因呢&#xff0c;这篇文章带你解决这个问题&#xff01; 快捷键 如果你的I…

人工智能之目标追踪DeepSort源码解读(yolov5目标检测,代价矩阵,余弦相似度,马氏距离,匹配与预测更新)

要想做好目标追踪,须做好目标检测,所以这里就是基于yolov5检测基础上进行DeepSort,叫它为Yolov5_DeepSort。整体思路是先检测再追踪,基于检测结果进行预测与匹配。 一.参数与演示 这里用到的是coco预训练人的数据集&#xff1a; 二.针对检测结果初始化track 对每一帧数据都输出…

Copilot基于企业PPT模板生成演示文稿

关于copilot创建PPT&#xff0c;咱们写过较多文章了&#xff1a; Copilot for PowerPoint通过文件创建PPT Copilot如何将word文稿一键转为PPT Copilot一键将PDF转为PPT&#xff0c;治好了我的精神内耗 测评Copilot和ChatGPT-4o从PDF创建PPT功能 Copilot for PPT全新功能&a…

MySQL 主从复制原理及其工作过程

一、MySQL主从复制原理 MySQL 主从复制是一种将数据从一个 MySQL 数据库服务器&#xff08;主服务器&#xff0c;Master&#xff09;复制到一个或多个 MySQL 数据库服务器&#xff08;从服务器&#xff0c;Slave&#xff09;的技术。以下简述其原理&#xff0c;主要包含三个核…

MySQL远程连接配置

一、配置TCP服务地址绑定 配置文件路径 /etc/mysql/mysql.cnf /etc/mysql/mysql.conf.d/mysqld.cnf具体文件可以通过 mysql --help查看 配置项 # 只接受本地连接 bind-address 127.0.0.1 mysqlx-bind-address 127.0.0.1改为 # 接受任意IP地址连接 bind-address …

iOS开发书籍推荐 - 《高性能 iOS应用开发》(附带链接)

引言 在 iOS 开发的过程中&#xff0c;随着应用功能的增加和用户需求的提升&#xff0c;性能优化成为了不可忽视的一环。尤其是面对复杂的界面、庞大的数据处理以及不断增加的后台操作&#xff0c;如何确保应用的流畅性和响应速度&#xff0c;成为开发者的一大挑战。《高性能 …

leetcode1047-删除字符串中的所有相邻重复项

leetcode 1047 思路 因为要删除字符串中的所有相邻重复项&#xff0c;那么在删除完成后&#xff0c;最后返回的元素中是不应该存在任何相邻重复项的&#xff0c;如果是普通的遍历&#xff0c;假设str ‘abbaca’&#xff0c;遍历出来只发现中间的bb是相邻重复的删除了以后a…

解决DeepSeek服务器繁忙问题的实用指南

目录 简述 1. 关于服务器繁忙 1.1 服务器负载与资源限制 1.2 会话管理与连接机制 1.3 客户端配置与网络问题 2. 关于DeepSeek服务的备用选项 2.1 纳米AI搜索 2.2 硅基流动 2.3 秘塔AI搜索 2.4 字节跳动火山引擎 2.5 百度云千帆 2.6 英伟达NIM 2.7 Groq 2.8 Firew…

web入侵实战分析-常见web攻击类应急处置实验1

场景说明&#xff1a; 某天运维人员发现在/opt/tomcat8/webapps/test/目录下&#xff0c;多出了一个index_bak.jsp这个文件&#xff0c; 并告诉你如下信息 操作系统&#xff1a;ubuntu-16.04业务&#xff1a;测试站点中间件&#xff1a;tomcat开放端口&#xff1a;22&#x…

【Kubernetes】k8s 部署指南

1. k8s 入门 1.1 k8s 简介 需要最需要明确的就是&#xff1a;kubernetes&#xff08;简称 k8s &#xff09; 是一个 容器编排平台 &#xff0c;换句话说就是用来管理容器的&#xff0c;相信学过 Docker 的小伙伴对于容器这个概念并不陌生&#xff0c;打个比方&#xff1a;容器…

深度解析:使用 Headless 模式 ChromeDriver 进行无界面浏览器操作

一、问题背景&#xff08;传统爬虫的痛点&#xff09; 数据采集是现代网络爬虫技术的核心任务之一。然而&#xff0c;传统爬虫面临多重挑战&#xff0c;主要包括&#xff1a; 反爬机制&#xff1a;许多网站通过检测请求头、IP地址、Cookie等信息识别爬虫&#xff0c;进而限制…

iOS事件传递和响应

背景 对于身处中小公司且业务不怎么复杂的程序员来说&#xff0c;很多技术不常用&#xff0c;你可能看过很多遍也都大致了解&#xff0c;但是实际让你讲&#xff0c;不一定讲的清楚。你可能说&#xff0c;我以独当一面&#xff0c;应对自如了&#xff0c;但是技术的知识甚多&a…

JDK最详细安装教程,零基础入门到精通,收藏这篇就够了

目录 一、下载与安装二、配置环境三、验证是否配置成功 一、下载与安装 1、下载地址 http://www.oracle.com/technetwork/java/javase/downloads/index.html 2、选择自己想要的版本下载&#xff0c;并且选择自己电脑对应的版本下载 3、下载完成之后&#xff0c;双击打开然后…

深研究:与Dify建立研究自动化应用

许多个人和团队面临筛选各种网页或内部文档的挑战,以全面概述一个主题。那么在这里我推荐大家使用Dify,它是一个用于LLM应用程序开发的低代码,开源平台,它通过自动化工作流程的多步搜索和有效汇总来解决此问题,仅需要最小的编码。 在本文中,我们将创建“ Deepresearch”…

新手向:SpringBoot后端查询到数据,前端404?(附联调时各传参方式注解总结-带你一文搞定联调参数)

前言&#xff1a; 在 Spring Boot 项目开发中&#xff0c;后端小伙伴可能经常遇到这样诡异的场景&#xff1a; 后台日志显示查询到了数据&#xff0c;但前端却一脸懵逼地告诉你 404 Not Found&#xff1f;接口明明写好了&#xff0c;Postman 直接访问却提示找不到&#xff1f…

Mysql各操作系统安装全详情

" 至高无上的命运啊~ " MySQL是一个关系型数据库管理系统&#xff0c;由瑞典 MySQL AB 公司开发&#xff0c;属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统之一&#xff0c;在 WEB 应用方面&#xff0c;MySQL是最好的RDBMS (Relational Database Mana…

RadASM环境,win32汇编入门教程之七

;运行效果 ;RadASM环境&#xff0c;win32汇编入门教程之七 ;在上一个教程里面&#xff0c;我们学习如何把数据显示出来。但是感觉太丑了&#xff0c;在这一教程里&#xff0c;我们来学习一下怎样让它们变漂亮点。 ;主要的内容是如何创建字体&#xff0c;设置字体的大小&#xf…

STL之string类的模拟实现

目录 1. string的成员变量 2. string的成员函数 2.1 string类的c_str()和swap()函数 2.2 string类的构造 2.3 string类的拷贝构造 2.3.1传统写法&#xff1a; 2.3.2现代写法&#xff1a; 2.4string类的运算符重载 2.4.1传统写法&#xff1a; 2.4.2现代写法 2. 5 …

深度学习笔记——LSTM

大家好&#xff0c;这里是好评笔记&#xff0c;公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本文详细介绍面试过程中可能遇到的LSTM知识点。 文章目录 LSTM&#xff08;Long Short-Term Memory&#xff09;LSTM 的核心部件LSTM 的公式和工作原理(1) 遗忘门&a…

基于SpringBoot的“食物营养分析与推荐网站”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“食物营养分析与推荐网站”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 系统首页界面 系统注册…