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

自定义类型:结构体,枚举,联合

结构体

结构体的基本声明

基础知识:结构是一些值的集合,这些值称为成员变量,结构的每个成员可以是不同类型的变量。

//学生
struct Stu
{//学生的相关信息char name[20];int age;
}s1,s2;
//s1,s2是直接创建的结构体变量(全局变量)在{}内创建的则是局部变量

 特殊声明:

匿名结构体类型(没有写结构体名称的结构体),只能在初始化时给定创建的结构体(即只能使用一次)。

结构体的自引用:

在结构中包含一个类型为该结构本身的成员

struct Stu
{int data;struct Stu* next;
};

常用于链表中,通过指针来连接数据。

结构体内存对齐

可以看到同样成员变量的结构体在计算大小时却占用不同大小的内存空间 ,而且占用空间大小与各部分变量占用之和也不相等。这是因为结构体在储存的时候有着专属的对齐规则

  • 第一个成员在与结构体变量偏移为0的地址处。
  • 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。
  • 对齐数=编译器默认的一个对齐数与该成员大小的较小值(vs编译器中默认值为8)
  • 结构体总大小为最大对齐数(每个成员变量都有一个对齐数)的整数倍。
  • 如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。

那么为什么需要存在内存对齐现象呢?

1.平台原因:

        不是所有的硬件平台都能访问任意地址上的任意数据,某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。

2.性能原因:

        数据结构(尤其是栈)应尽可能地在自然边界上对齐,因为访问未对齐的内存,处理器需要作两次内存访问,而对齐的内存访问仅需要一次访问。

        总的来说就是就是拿空间来换取时间。

  结构体传参:

#include<stdio.h>
struct S
{int data[1000];int num;
};
void print1(struct S ss)
{int i = 0;for (i = 0; i < 3; i++){printf("%d ", ss.data[i]);}printf("%d\n", ss.num);
}void print2(struct S* ps)
{int i = 0;for (i = 0; i < 3; i++){printf("%d ", ps->data[i]);}printf("%d\n", ps->num);
}int main()
{struct S s = { {1,2,3},100 };print1(s);//传值调用print2(&s);//传址调用return 0;
}

理论上两种传参都可以,但是更建议使用第二种传参方式即传址调用,因为函数传参的时候,参数是需要压栈的,会有时间和空间上的系统开销。

位段:

声明和结构体相似,但是成员名后有一个冒号和一个数字。冒号后的数字表示需要为数据分配的比特位, 例如用来表示真假的 int flag;实际flag只需一个比特位

struct A
{int a : 2;int b : 3;
};

此处A就是一个位段

 位段的内存分配:

1.位段的成员可以是int ,unsigned int,signed int或者是char(属于整形家族)类型

2.位段的空间上是按照需要以4个字节(int)或者1个字节(char )的方式来开辟的

3.位段涉及很多不确定因素,位段是不跨平台的,注重可移植的程序应该避免使用位段。

位段的跨平台问题:

1.int位段被当成有符号数还是无符号数是不确定的。

2.位段中最大位的数目不能确定,(16位机器最大16,32位机器最大32,写成27,在16位机器会出问题)

3.位段中的成员在内存中从左向右分配,还是从右向左分配标准尚未定义。

4.当一个结构包含两个位段,第二个位段成员比较大,无法容纳于第一个位段剩余的位时,是舍弃剩余位还是继续利用,也是不确定的。

总结:跟结构体相比,位段可以达到同样的效果,,还可以节约内存空间,但是有跨平台的问题存在。

C语言实现一个简单的通讯录

contact.c(局部模块函数的设计)

#include "contact.h"
//各个函数模块的实现void InitContact(Contact* pc)
{assert(pc);pc->count = 0;memset(pc->data, 0, sizeof(pc->data));
}void AddContact(Contact* pc)
{assert(pc);if (pc->count == 100){printf("通讯录已满,无法添加\n");return;}printf("请输入名字:>");scanf("%s", pc->data[pc->count].name);printf("请输入年龄:>");scanf("%d", &(pc->data[pc->count].age));printf("请输入性别:>");scanf("%s", pc->data[pc->count].sex);printf("请输入电话:>");scanf("%s", pc->data[pc->count].tele);printf("请输入地址:>");scanf("%s", pc->data[pc->count].addr);pc->count++;printf("增加成功\n");}void ShowContact(const Contact* pc)
{assert(pc);int i = 0;printf("%-20s\t%-5s\t%-5s\t%-12s\t%-30s\n", "名字", "年龄", "性别", "电话", "地址");for (i = 0; i < pc->count; i++){printf("%-20s\t%-3d\t%-5s\t%-12s\t%-30s\n", pc->data[i].name,pc->data[i].age,pc->data[i].sex,pc->data[i].tele,pc->data[i].addr);}
}static int  FindByName(Contact* pc, char name[])
{assert(pc);int i = 0;for (i = 0; i < pc->count; i++){if (0 == strcmp(pc->data[i].name, name)){return i;}}return -1;
}void DelContact(Contact* pc)
{char name[MAX_NAME] = { 0 };assert(pc);int i = 0;if (pc->count == 0){printf("通讯录为空,没有信息可以删除\n");return;}printf("请输入要删除人的名字:>");scanf("%s", name);//删除//先查找int pos = FindByName(pc, name);if (pos == -1){printf("要删除的人不存在\n");return;}//再删除for (i = pos; i < pc->count-1; i++){pc->data[i] = pc->data[i + 1];}pc->count--;printf("删除成功\n");
}void SeaContact(Contact* pc)
{assert(pc);char name[MAX_NAME] = { 0 };printf("请输入要查找的人的名字:>\n");scanf("%s", name);int pos = FindByName(pc, name);if (pos == -1){printf("要查找的人不存在\n");return;}printf("%-20s\t%-5s\t%-5s\t%-12s\t%-30s\n", "名字", "年龄", "性别", "电话", "地址");printf("%-20s\t%-3d\t%-5s\t%-12s\t%-30s\n",pc->data[pos].name,pc->data[pos].age,pc->data[pos].sex,pc->data[pos].tele,pc->data[pos].addr);
}void ModifyContact(Contact* pc)
{assert(pc);char name[MAX_NAME] = { 0 };printf("请输入要修改的人的名字:>\n");scanf("%s", name);int pos = FindByName(pc, name);if (pos == -1){printf("要修改的人不存在\n");return;}printf("要修改的人的信息已经查找到,请开始修改\n");printf("请输入名字:>");scanf("%s", pc->data[pos].name);printf("请输入年龄:>");scanf("%d", &(pc->data[pos].age));printf("请输入性别:>");scanf("%s", pc->data[pos].sex);printf("请输入电话:>");scanf("%s", pc->data[pos].tele);printf("请输入地址:>");scanf("%s", pc->data[pos].addr);printf("修改成功\n");
}int cmp_peo_by_name(const void* e1, const void* e2)
{return strcmp(((People*)e1)->name, ((People*)e2)->name);
}
//按照名字来排序
void SortContact(Contact* pc)
{assert(pc);qsort(pc->data, pc->count, sizeof(People), cmp_peo_by_name);printf("排序成功\n");
}

test.c(通讯录主逻辑)

#include "contact.h"
void menu()
{printf("*******      通讯录     ******\n");printf("***** 1.add     2.del   *****\n");printf("***** 3.search  4.modify*****\n");printf("******5.show    6.sort  *****\n");printf("*****       0.exit      *****\n");
}
int main()
{int input = 0;Contact con;//通讯录//初始化通讯录InitContact(&con);do{menu();printf("请选择:>");scanf("%d", &input);switch (input){case 1:AddContact(&con);break;case 2:DelContact(&con);break;case 3:SeaContact(&con);break;case 4:ModifyContact(&con);break;case 5:ShowContact(&con);break;case 6:SortContact(&con);break;case 0:printf("退出通讯录\n");break;default:printf("选择错误\n");break;}} while (input);return 0;}

 contact.h(头文件和函数的声明)

#include <string.h>
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>#define MAX 100
#define MAX_NAME 20
#define MAX_SEX 10
#define MAX_TELE 12
#define MAX_ADDR 30
//人的信息
typedef struct People
{int age;char name[20];char sex[10];char tele[12];char addr[30];
}People;//通讯录
typedef struct Contact
{People data[100];//存放人的信息int count;//记录当前通讯录中实际的个数
}Contact;//初始化通讯录
void InitContact(Contact* pc);//增加联系人
void AddContact(Contact* pc);//打印通讯录
void ShowContact(const Contact* pc);//删除联系人
void DelContact(Contact* pc);//查找联系人
int  FindByName(Contact* pc, char name[]);void SeaContact(Contact* pc);//修改联系人
void ModifyContact(Contact* pc);//排序通讯录中的内容
void SortContact(Contact* pc);

枚举:

顾名思义,枚举就是一一列举,把可能的取值一一列举出来,“枚举”(是一种数据类型,它由一组预定义的常量组成,这些常量通常被称为“枚举值”。枚举在编程中被广泛使用,主要用于限制变量的取值范围,使代码更加清晰、易于维护,并减少错误。

 枚举类型的定义

 以上是一个简单的星期的枚举,枚举的定义与结构体类似,需要注意的是成员间使用逗号分隔,而结构体是使用分号,{}中的内容就是枚举常量,这些成员都是有值的,默认从0开始,每次加一,当然也可以在定义的时候赋初值。

枚举的优点:

我们可以使用#define来定义常量,为什么还要用枚举?

  • 增加代码的可读性和可维护性
  • 比#define定义的标识符更严谨,因为枚举有类型检查
  • 防止了命名污染(封装)
  • 便于调试
  • 使用方便,一次可以定义多个常量

 联合(供用体)

联合类型的定义

联合是一种特殊的自定义类型,定义的变量包含一系列成员,特征是这类成员共用同一块空间,但是每次只有一个成员在使用这片空间,类似于共享单车,其占用空间大小为单个成员占用的最大空间大小。

相关文章:

自定义类型:结构体,枚举,联合

结构体 结构体的基本声明 基础知识&#xff1a;结构是一些值的集合&#xff0c;这些值称为成员变量&#xff0c;结构的每个成员可以是不同类型的变量。 //学生 struct Stu {//学生的相关信息char name[20];int age; }s1,s2; //s1,s2是直接创建的结构体变量&#xff08;全局变…...

柠檬水找零(力扣860)

这道题的贪心很简单&#xff0c;就是体现在对于20元的找零上。根据题意&#xff0c;20元有两种找零方式&#xff1a;1.找一张5元和一张10元&#xff1b;2.找3张5元。但是5元比较万能&#xff0c;因为无论是10还是20都需要用5元来找零&#xff0c;所以我们优先考虑第一种找零方式…...

sprintf和sscanf的用法和区别

sprintf和sscanf是C语言中常用的字符串处理函数&#xff0c;它们各自有不同的用途和用法。 1、sprintf的用法 sprintf函数主要用于将数据格式化为字符串并存储在指定的缓冲区中。其函数原型为&#xff1a; int sprintf(char *str, const char *format, ...); str&#xff1a…...

deepseek自动化代码生成

使用流程 效果第一步&#xff1a;注册生成各种大模型的API第二步&#xff1a;注册成功后生成API第三步&#xff1a;下载vscode在vscode中下载agent&#xff0c;这里推荐使用cline 第四步&#xff1a;安装完成后&#xff0c;设置模型信息第一步选择API provider&#xff1a; Ope…...

静态时序分析:时钟组间的逻辑独立、物理独立和异步的区别

相关阅读 静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html 当设计中存在多个时钟&#xff08;同步或异步&#xff09;时&#xff0c;该如何使用SDC命令约束设计呢&#xff1f;本文就将对此进行讨论。 逻辑独立 例1 多个时钟完全逻辑独立 图1 逻辑…...

深入HBase——数据结构与算法

引入 通过前面的文章&#xff0c;我们对HBase已经有了基本认识&#xff0c;下面我们从HBase最核心的算法和数据结构进一步深入HBase。 HBase的一个列簇&#xff08;Column Family&#xff09;本质上就是一棵LSM树&#xff08;Log-Structured Merge-Tree&#xff09;​。LSM树…...

学习Linux准备2

使用win10系统带的wsl配置ubuntu系统&#xff0c;通过wsl功能我们可以更简单更轻松的获得Linux系统环境。 首先开启Windows自带的wsl功能 打开控制面板&#xff0c;选中启用或关闭Windows功能 这里我们点击进入 将上图红√点击上&#xff0c;点击确定&#xff0c;然后重新启动…...

MATLAB图像处理:图像分割方法

图像分割将图像划分为具有特定意义的子区域&#xff0c;是目标检测、医学影像分析、自动驾驶等领域的核心预处理步骤。本文讲解阈值分割、边缘检测、区域生长、聚类分割、基于图的方法等经典与前沿技术&#xff0c;提供MATLAB代码实现。 目录 1. 图像分割基础 2. 经典分割方…...

什么是“可迭代”

在 Python 中&#xff0c;“可迭代”&#xff08;Iterable&#xff09;是一个非常重要的概念&#xff0c;它指的是任何可以被逐个访问其元素的对象。换句话说&#xff0c;如果一个对象支持迭代操作&#xff08;比如可以通过 for 循环逐个访问其元素&#xff09;&#xff0c;那么…...

使用Ubuntu搭建Java部署环境

White graces&#xff1a;个人主页 &#x1f649;专栏推荐:Java入门知识&#x1f649; &#x1f439;今日诗词:小舟从此逝&#xff0c;江海寄余生&#x1f439; ⛳️点赞 ☀️收藏⭐️关注&#x1f4ac;卑微小博主&#x1f64f; ⛳️点赞 ☀️收藏⭐️关注&#x1f4ac;卑微小…...

Linux 文件的三个时间:Access、Modify 和 Change

目录 一、文件的三个时间戳 1. 访问时间&#xff08;Access Time&#xff09; 2. 修改时间&#xff08;Modify Time&#xff09; 3. 更改时间&#xff08;Change Time&#xff09; 二、如何查看文件的三个时间戳 三、文件时间戳的变化规则 1. 修改文件内容 2. 修改文件…...

移植live555 上的 rtsp

一、V4L2视频采集模块&#xff08;完整示例&#xff09; #include <linux/videodev2.h> #include <sys/ioctl.h> #include <fcntl.h>// 初始化V4L2摄像头 int init_v4l2_camera(const char* dev_path, int width, int height) {int fd open(dev_path, O_RD…...

基于SpringBoot的“宠物救助及领养平台”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“宠物救助及领养平台”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统整体功能图 系统首页界面 系统注册页面…...

Gemini 2.0助力科学突破,AI联合科学家系统登场

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

electron提升软件运行权限,以管理员权限运行

大家有任何想法&#xff0c;都可以联系博主沟通。 本系列为实战文章&#xff0c;最终实现的桌面工具软件&#xff0c;获取方式&#xff1a;百度网盘地址&#xff1a;https://pan.baidu.com/s/1yrl0jYpti7QCn8CHBRT2lw?pwd1234 正文开始 前言一、提升electron运行权限的三种方…...

Docker 容器调试技巧

在开发和运维过程中&#xff0c;调试 Docker 容器中的应用或服务是一个常见且重要的任务。由于容器是相互隔离的&#xff0c;容器内部的日志和错误信息可能不像传统的服务器那样直观&#xff0c;因此掌握 Docker 容器调试技巧对于快速定位和解决问题至关重要。 本文将介绍一些…...

TSMaster【第七篇:千机百变——面板设计艺术】

武侠场景导入&#xff1a;唐门暗器阁的启示 江湖传言&#xff0c;唐门暗器之所以独步天下&#xff0c;全凭其「千机匣」中七十二种机关变化。TSMaster面板设计恰似打造暗器机关——控件如同飞镖、机簧、毒针&#xff0c;组合方式不同则威力迥异。昔日某新势力车型因仪表盘刷新…...

ctfshow——robots后台泄露

题目提示&#xff1a;总有人把后台地址写入robots&#xff0c;帮黑阔大佬们引路 题目如上图所示 根据提示&#xff0c;我们可以在URL上查看是否存在robots文件 打开后发现其中的内容如上图所示&#xff0c;存在一个flagishere.txt文件&#xff0c;我们可以继续在URL上进行操作…...

普通人怎样用好Deepseek?

第一章&#xff1a;准备篇&#xff08;30分钟上手&#xff09; DeepSeek 是一款功能强大的数据处理和分析工具&#xff0c;广泛应用于数据挖掘、机器学习、商业智能等领域。 本文将通过图文结合的方式&#xff0c;详细介绍 DeepSeek 的安装、配置、基本使用、高级功能以及实用…...

负载均衡集群( LVS 相关原理与集群构建 )

目录 1、LVS 相关原理 1.1、LVS集群的体系结构以及特点 1.1.1 LVS简介 1.1.2 LVS体系结构 1.1.3 LVS相关术语 1.1.4 LVS工作模式 1.1.5 LVS调度算法 1.2 LVS-DR集群介绍 1.2.1 LVS-DR模式工作原理 1.2.2 LVS-DR模式应用特点 1.2.3 LVS-DR模式ARP抑制 1.3 LVS – NA…...

前端面试-JavaScript 数据类型检测全解

目录 一、基础检测方法 二、方法深度解析 1. typeof 运算符 2. instanceof 运算符 3. 终极检测方案 三、特殊场景检测方案 四、手写实现原理 1. 通用类型检测函数 2. 改进版数组检测&#xff08;兼容旧浏览器&#xff09; 五、常见面试陷阱 六、最佳实践指南 七、扩…...

百度百舸 DeepSeek 一体机发布,支持昆仑芯 P800 单机 8 卡满血版开箱即用

在私有云环境中成功部署 DeepSeek 满血版并实现性能调优&#xff0c;并不是一件容易的事情。选择合适的 GPU 配置、安装相应的环境、成功部署上线业务、加速推理任务加速、支撑多用户并发 …… 完成业务测试&#xff0c;成功融入生产业务中。 为了帮助企业快速实现 DeepSeek 服…...

微软CEO-纳德拉访谈-AGI计划

在与知名科技播客主播 Dwarkesh Patel 的深度访谈中,微软 CEO 萨提亚・纳德拉围绕 AI、量子计算、微软发展等多方面分享深刻见解,下面是针对访谈内容的介绍,其中还是有很多值得我们学习的地方。 1 AI 领域见解 影响力评估:纳德拉直言行业所标榜的 AGI 里程碑是 “无意义的基…...

Web自动化中Selenium下Chrome与Edge的Webdriver常用Options参数

目录 引言 说明 Add_argument() 添加方式 常用参数 Add_experimental_option() 添加方式 常用方法 任务结束后仍然保持浏览器打开 禁用“Chrome 正受到自动测试软件的控制”提示 设置下载路径 禁用弹窗拦截 禁用图片加载 禁用 JavaScript 注意 引言 …...

1.4 嵌入式系统的软件

嵌入式系统的开发流程中&#xff0c;硬件和固件设计完成后&#xff0c;嵌入式软件承担起实现功能、用户交互、系统集成和性能优化等任务&#xff1b;嵌入式系统软件分为设备驱动、操作系统和应用程序三个层面。 因此嵌入式系统软件开发工程师通常分为三类&#xff1a;嵌入式系统…...

深蓝学院自主泊车第3次作业-IPM

目录 1 题目介绍2 求解 1 题目介绍 已知鱼眼相机的参数&#xff0c; image_width&#xff0c;表示图像的宽度image_height&#xff0c;表示图像的高度 ξ \xi ξ&#xff0c;表示鱼眼相机参数 k 1 k_1 k1​、 k 2 k_2 k2​&#xff0c;表示径向相机参数 p 1 p_1 p1​、 p 2 p…...

Confluence 8.5.18 - windows 安装部署详解

本文我们所讲述的是Confluence - 8.5.18 -windows版本版本的详细安装破解步骤,与Confluence - 8.0.0之前的版本不同的是,部分文件名称发生了变化,以前的破解方式已不适用。 1.首先我们先准备安装所需要的文件 atlassian-confluence-8.5.18-x64.exemysql-connector-java-8.0…...

深入解析过滤器模式:数据筛选与处理的高效工具

过滤器模式&#xff1a;数据筛选与处理的高效工具 在软件开发的复杂领域中&#xff0c;数据的筛选与处理是常见的任务。过滤器模式作为一种实用的设计模式&#xff0c;为解决这类问题提供了有效的解决方案。它允许开发者根据不同的标准对一组对象进行过滤操作&#xff0c;从而…...

linux常用基础命令_最新版

常用命令 查看当前目录下个各个文件大小查看当前系统储存使用情况查看当前路径删除当前目录下所有包含".log"的文件linux开机启动jar更改自动配置文件后操作关闭自启动linux静默启动java服务查询端口被占用查看软件版本重启关机开机启动取别名清空当前行创建文件touc…...

曝光铁三角

一、曝光铁三角的关系解析 光圈&#xff08;Aperture&#xff09; 作用&#xff1a;控制光线进入相机的孔径大小&#xff0c;同时影响景深&#xff08;画面清晰范围&#xff09;。 数值规则&#xff1a;光圈值&#xff08;如F/1.8、F/8&#xff09;越小&#xff0c;孔径越大&am…...

reacct hook useState

useState useState 是一个 React Hook&#xff0c;允许函数组件在内部管理状态。 使用方法 let [str,setStr] useState(‘three’) useState接受的参数为初始值&#xff1b;返回一个数组 第一个元素&#xff1a;当前的状态值&#xff1b;第二个元素&#xff1a;一个更新该状…...

政安晨【零基础玩转各类开源AI项目】DeepSeek 多模态大模型Janus-Pro-7B,本地部署!支持图像识别和图像生成

政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff01; 目录 下载项目 创建虚拟环境 安装项目依赖 安装 Gradio&#xff08;UI&#xff09; 运…...

计算机毕业设计SpringBoot+Vue.js学生读书笔记共享(源码+LW文档+PPT+讲解+开题报告)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

QEMU源码全解析 —— 内存虚拟化(17)

接前一篇文章:QEMU源码全解析 —— 内存虚拟化(16) 本文内容参考: 《趣谈Linux操作系统》 —— 刘超,极客时间 《...

Maven 构建中的安全性与合规性检查

在现代软件开发中&#xff0c;确保应用程序的安全性和合规性至关重要。随着开源软件和第三方依赖的广泛使用&#xff0c;构建过程中对依赖的安全性和合规性检查变得尤为重要。通过 Maven 构建工具&#xff0c;我们可以集成多种安全性和合规性检查机制&#xff0c;帮助开发者检测…...

Deepseek R1 和其他的大模型 共同辅助决策交通出行方案

比一比各家大模型 问题描述一、Deepseek R1通勤方式评估报告&#xff08;一&#xff09;评分模型说明&#xff08;二&#xff09;各选项评分明细&#xff08;三&#xff09;加权总分计算&#xff08;四&#xff09;结论 二、文心一言通勤方式评估&#xff08;一&#xff09;时间…...

HTTPS 通信流程

HTTPS 通信流程时序图&#xff1a; #mermaid-svg-HWoTbFvfih6aYUu6 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-HWoTbFvfih6aYUu6 .error-icon{fill:#552222;}#mermaid-svg-HWoTbFvfih6aYUu6 .error-text{fill:#…...

C++——list模拟实现

目录 前言 一、list的结构 二、默认成员函数 构造函数 析构函数 clear 拷贝构造 赋值重载 swap 三、容量相关 empty size 四、数据访问 front/back 五、普通迭代器 begin/end 六、const迭代器 begin/end 七、插入数据 insert push_back push_front 八、…...

开发指南103-jpa的find**/get**全解

平台使用jpa来访问数据库。在dao层可以通过定义find**/get**函数&#xff0c;通过名字直接绑定数据库字段。find**和get**有一定区别&#xff1a; 1.get**方法查询不到数据抛出异常&#xff0c;find**方法查询不到数据则返回null。 2.get**是延迟加载&#xff0c;在真正访问返…...

初学者如何设置以及使用富文本编辑器[eclipse版]

手把手教你设置富文本编辑器 参考来源&#xff1a;UEditor Docs 初学者按我的步骤来就可以啦 一、设置ueditor编辑器 1.提取文件[文章最底部有链接提取方式] 2.解压文件并放到自己项目中&#xff0c;在WebContent目录下&#xff1a; 3. 修改jar包位置路径 到--> 注意&a…...

Flutter 启动优化

Dart VM在Flutter中的作用是什么&#xff1f;它负责执行Dart代码&#xff0c;无论是JIT还是AOT模式都需要它。在JIT模式下&#xff0c;VM随应用一起运行&#xff0c;而在AOT模式下&#xff0c;代码已经被编译成机器码&#xff0c;VM可能不需要运行时存在&#xff1f;不过实际上…...

Java Idea配置问题

在 cmd 里手动切换&#xff1a; set JAVA_HOMEC:\Program Files\Java\jdk1.8.0_192 set PATH%JAVA_HOME%\bin;%PATH%在Idea的终端查看: java -versionClass com.sun.tools.javac.tree.JCTree$JCImport does not have member field ‘com.sun.tools.javac.tre JDK 版本不匹配 …...

百度搜索,能否将DeepSeek变成“内功”?

最近&#xff0c;所有的云平台和主流APP都在努力接入DeepSeek。其中&#xff0c;搜索类APP与搜索引擎更是“战况激烈”。那么问题来了&#xff0c;接入DeepSeek已经变成了标准配置&#xff0c;到底应该如何做出差异化&#xff1f;接入DeepSeek这件事能不能实现11大于2的效果&am…...

【C++委托与事件】函数指针,回调机制,事件式编程与松耦合的设计模式(上)

前言 上一次发文章已经是在两个月前了hhh&#xff0c;期间也是忙忙碌碌做了不少事情也鸽了不少东西… 本文我们来讲讲博主最近在项目中频繁使用的&#xff0c;也就是广泛运用于C#或者Java的一个常用编程机制&#xff08;思路&#xff09;-----委托和事件。由于C在语言特性上没…...

【Java学习】抽象类与接口

面向对象系列四 一、抽象方法 二、抽象类 三、意义检查 1.抽象方法的意义 2.意义检查 体现 四、接口 1.级别层次 2.接口变量 3.意义 4.成员 成员变量&#xff1a; 成员方法&#xff1a; 一、抽象方法 没有方法体即没有任何实现的方法是抽象方法&#xff0c;只有在…...

体育电竞比分网开发流程

开发一个体育电竞比分网的流程可以分为以下几个主要步骤&#xff1a; 1. 需求分析 目标用户&#xff1a;确定网站的主要用户群体&#xff0c;如体育迷、电竞爱好者等。 功能需求&#xff1a;列出网站需要实现的功能&#xff0c;如实时比分更新、赛事日程、新闻资讯、用户评论…...

vue2和vue3的主要区别

Vue 2 和 Vue 3 之间有几个主要区别&#xff0c;涉及到性能、功能和架构上的改进。以下是一些核心的区别&#xff1a; Composition API&#xff08;组合式 API&#xff09;&#xff1a; Vue 2 使用的是选项式 API&#xff08;Options API&#xff09;&#xff0c;即通过 data, …...

粘贴到Word里的图片显示不全

粘贴到Word里的图片显示不全&#xff0c;可从Word设置、图片本身、软件与系统等方面着手解决&#xff0c;具体方法如下&#xff1a; Word软件设置 经实践发现&#xff0c;图片在word行距的行距出现问题&#xff0c;可以按照如下调整行距进行处理 修改段落行距&#xff1a; 选…...

直角三角堰计算公式

直角三角堰的计算公式通常用于确定流经直角三角形形状的堰的流量。河北瑾航科技遥测终端机 通过采集液位数据(模拟量、串口485/232)&#xff0c;计算得到瞬时流量&#xff0c;然后通过积分进行累计算出累积量&#xff1b;直角三角堰的流量计算公式为&#xff1a; 直角三角堰 计…...

细说Java 引用(强、软、弱、虚)和 GC 流程(一)

一、引用概览 1.1 引用简介 JDK1.2中引入了 Reference 抽象类及其子类&#xff0c;来满足不同场景的 JVM 垃圾回收工作&#xff1a; SoftReference 内存不足&#xff0c;GC发生时&#xff0c;引用的对象&#xff08;没有强引用时&#xff09;会被清理&#xff1b;高速缓存使用…...