利用enum实现图

条款10:优先选用限定作用域enum,而非不限定作用域enum 限定作用域enum的枚举值不会污染外围命名空间,减少与其他标识符冲突的风险。非限定作用域enum的枚举值可能与其他变量或枚举值重名,导致编译错误或逻辑混淆。在需要与C代码交互或必须隐式转换为整数的旧代码中,可能需保留非限定作用域enum。限定作用域enum支持前置声明(forward declaration),编译器可直接确定其底层类型(默认为。显式转换,避免意外的类型转换错误。非限定作用域enum会隐式转换为整数,可能引发未预期的行为。非限定作用域enum需看到定义才能确定底层类型,不利于模块化设计。 阅读详情
//com.insanus.Node.java
package com.insanus;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Set;

public enum Node {
    A, B, C, D;
    //存放结点
    private boolean visit;
    private Set<Node> data;
    Node() {
        data = new HashSet<>();
        visit = false;
    }
    public Node[] getData() {
        return data.toArray(new Node[0]);
    }
    public boolean getVisit() {
        return visit;
    }

    public void changeVisit() {
        visit = !visit;
    }
    public static void changeFalseVisit() {
        for (Node i : Node.values()) {
            if(i.getVisit() == true) {
                i.changeVisit();
            }
        }
    }

    public void add(Node i) {
        data.add(i);
    }
    //有向图
    public static void relation(Node n, Node m) {
        n.add(m);
        m.add(n);
    }

    public static int getNodeSize() {
        return Node.values().length;
    }

    public static void initMap(int[][] i) {
        Node[] data = Node.values();
        for (int x = 0; x < i.length; x ++) {
            for (int m = 0; m < i.length; m ++) {
                if(i[x][m] == 1) {
                    relation(data[x], data[m]);
                }
            }
        }
    }

    public static void DFS(Node i) {
        System.out.println(i);
        i.changeVisit();
        for (Node n: i.getData()) {
            if (n.getVisit())
                continue;
            DFS(n);
        }
    }
    public static void BFS(Node i) {
        LinkedList<Node> data = new LinkedList<>();
        Node n;
        data.addLast(i);
        i.changeVisit();
        while(!data.isEmpty()) {
            System.out.println(n = data.remove(0));
            for (Node a: n.getData()) {
                if (!a.getVisit()) {
                    data.addLast(a);
                    a.changeVisit();
                }
            }
        }
    }
    public static void main(String[] args) {
        int [][] map = {
                {1, 1, 1, 0},
                {1, 1, 0, 1},
                {1, 0, 1, 1},
                {0, 1, 1, 1}
        };
        initMap(map);
        Node root = Node.A;
        BFS(root);
        changeFalseVisit();
        System.out.println("-----------------");
        DFS(root);
    }
}/* Output:
A
B
C
D
-----------------
A
B
D
C
*///:~

实现了用enum实现无向图,可以通过输入一个邻接矩阵来建图。

QMetaEnum利用Qt元数据实现枚举(enum)类型值及字符串转换 介绍 QMetaEnum类属于Qt core模块,提供了一系列针对枚举类型的操作函数,当然不能操作任意枚举类型,若想进行自定义枚举的操作,首先需要对枚举做处理,此时需要QObject类的帮助,使用此类提供的Q_ENUM模板。 详细信息请见官方文档:QObject、QMetaEnum 自定义枚举类型 #include <QObject> class TestClass ... 阅读详情

相关推荐

在JavaWeb中使用enum

本文基于spring4.2、mybatis3.4实现。 今天打通了从jsp到实体类到DB的全过程,其中有些地方还是不够完美。欢迎拍砖。 概述: 这里主要讲的是,实体类中包含enum属性,解决(jsp 与 实体类) 之间 以及 (实体类 与 DB) 之间的取值赋值问题。

lzjansing的专栏 2377

java 枚举保存数据库_在Spring Boot中使用Java枚举自动序列化参数并自动保存数据库 - Dario...

分享在Spring应用程序中使用Java枚举Java Enum映射字段的有效方法。目标:一个RestController类,以通过不同的HTTP方法(GET,POST等)获取并使用枚举。一个服务类,它通常用来做一些种类的业务逻辑的实现一些DAO类(例如JPAEntity和Spring Data Repository),通过保存或检索数据以非常简单的方式与数据库进行通信我希望我的Web层(Rest...

weixin_39929683的博客 909

嵌入式:简单的service框架

在嵌入式中,我们获取一个资源、设置一个变量、更新数据的话最直接的方式就是直接调用一个函数。这样的写法也可以满足基本的功能,前提是这个系统是只要一个任务,只有一个while(1)如图1.1。图1.1当有两个或者两个以上的任务的时候,同时调用一个函数(设置一个状态值、操作同一个资源、操作指针等行为)的流程如图1.2。图1.2当两个任务同时操作一个资源的时候,就会有重入的问题,会导致想不到的异常问题(数据不对、指针异常等)。

stupid的博客 986

Enum使用及原理

首先,直接继承抽象类Enum而不选择使用enum关键字创建枚举类是行不通的,通不过编译:所有enum都继承了java.lang.Enum抽象类,该类的声明为public abstract class Enum<E extends Enum<E>> implements Comparable<E>, Serializable该抽象类中实现的 oridinal、equals、hashCo

joenqc的博客 6199

【ROS】usb_cam相机标定

1. 唠叨两句 当我们要用相机做测量用途时,就需要做相机标定了,不然得到的计算结果会有很大误差,标定的内容包括三部分:内参,外参还有畸变参数。所以标定的过程就是要求得上面这些参数。 以前弄这个事估计挺麻烦,需要做实验和计算才能得到,现在通过ros的开源包几分钟就能完成相机标定,感激! 具体的内外参和畸变系数的说明,可以看看Reference里面的第一个链接,写得很详细。 2. 准备工作 要准备三样东西: usb_cam的ROS启动包 相机标定的ROS包 还有一个用于标定的棋盘格 1)usb_cam启动包

Will_Ye的博客 8209

恶意流量检测数据集

对当前公开的恶意流量相关数据集进行归类总结,持续更新相关论文

tyutwuxuan的博客 1943

简单枚举对象使用

枚举对象简单使用 枚举对象 package com.tjsoft.gcjs.sj.enums; import java.time.format.DateTimeFormatter; public enum NodeEnum { /**分发成功*/ HAND_SUCCESS("10", "分发成功", "1"), /**分发失败*/ HAND_FAILED("11", "分发失败", "1"), /**预审通过*/ REVIEW_SUCCESS("20",

qq_37809967的博客 395

CGAL-5.6的安装与编译(Win10+vs2022+CGAL-5.6+Boost1.82.0)

CGAL是Computational Geometry Algorithms Library(计算几何算法库)的缩写,C++的高效算法库。CGAL只是一个头文件库(从5.0版本开始),这意味着CGAL无需编译,只需安装好CGAL的依赖项即可。CGAL5.6。

baidu_34931359的博客 3903

Qt中利用QMetaEnum实现枚举(enum)类型值及字符串转换

在Qt帮助文档中查Q_ENUM,Q_ENUM是自Qt 5.5引入的。 可以看到: Enumerations that are declared with Q_ENUM have their QMetaEnum registered in the enclosing QMetaObject. You can also use QMetaEnum::fromType() to get the QMe...

斧冰 9000

检索生成(RAG) vs 长文本大模型:实际应用中如何选择?

大模型的上下文理解能力直接影响到 LLMs 在复杂任务和长对话中的表现。本期内容聚焦于两种主流技术:长上下文(Large Context Windows)和检索增强生成(RAG)。这两种技术各有何优势?在实际应用中,我们又该如何权衡选择?文章不仅详细阐述了这两种技术的工作原理,还深入分析了它们在效率、准确性和实施成本等方面的差异。文章特别提到了在执行重复性任务时使用 Context Caching 优化长上下文的优势,然而,缓存策略的效果很大程度上取决于提示词的可预测性。

2401_85782938的博客 1256

PLC框架-1.3- 汇川PN伺服(3号报文)

本文以汇川IS620F伺服为例,详细介绍了FB_Servo_ToAxis功能块的应用方法。该功能块封装了MC_Home等轴控指令,实现使能、定位、点动、速度模式及回零等功能,支持转矩限制与显示,并具备行程统计和HMI单位自动切换特性。文章从硬件配置(PN网络连接、报文选择)、参数设置(控制模式、电子齿轮比),到软件实现(功能块调用、手动/自动控制逻辑)进行了系统说明,重点展示了绝对/相对定位、速度模式等典型应用场景的程序编写方法,为汇川伺服在Profinet网络下的工程应用提供了完整解决方案。

qq_34047402的博客 758

C++实现enum反射,类似magic_enum,支持enum classes

有一个首先我们想实现这样打印出来的就是对于这个字符串,我们只需要知道;T N =后面跟的内容是啥就实现了我们的目标但是我们不想像这样把参数写在模板了,而是想用一个函数直接传参也就是想实现但是这样有问题,因为n是变量,无法传入模板。T1T2T3这样子可以保证传入模板的是常量并且可以动态判断了到这里我们其实已经可以实现反射了。但是很显然这个代码有那么一个问题:函数这样只能判断有限个数值,如果有更多数值呢,写无限个if吗。

gxt_kt的博客 928

ARFoundation系列讲解 - 24 锚点

一、添加平面检测和平面可视化 请参考 ARFounnation快速入门-08平面检测 案例 二、添加射线检测 1.在AR Session Origin 组件上添加ARRaycastManager 脚本

a451319296的博客 4880

在java中利用enum实现swtich String类型

在有多个选择路径的情况下,利用Switch可以使程序更加简洁有效。但由于其只能对整数选择因子进行判断,所以限制了其在其他类型尤其是String的使用,本文利用JDK1.5新推出的enum,实现了一种可以对String类型进行Switch的方法。直接看代码:enum EnumExample {     Teamreq,Matreq;}public class EnumTe

pqw1157的专栏 5114

美军利用MANET技术实现无人作战单元协同作战

本文首先介绍了移动自组织网络 (MANET)以及Wave Relay®波形中继技术,并探讨了波形中继MANET平台在美空军ABMS项目等军事方面的运用情况。

guanyifu9的博客 856

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

python中enum_Python如何实现enum

什么是enum,为什么需要它?枚举类型,也称为enum,是一种数据类型,由一组命名值组成。这些可枚举的命名值充当计算机语言中的常量。例如,COLOR枚举可以包括诸如RED, GREEN, BLUE等命名值。这些命名值都是大写,以区别于变量。为什么要使用枚举呢?可以想像这样一种情景:需要在网站中将用户的性别限制为MALE, FEMALE和N/A。当然,字符串列表也可以胜任,如user.gender=...

weixin_33256071的博客 9444

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

C++11的enum class & enum struct和enum

C++标准文档——n2347(学习笔记) 链接:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf旧版enum存在的问题 1 问题1向整形的隐式转换 2 问题2无法指定底层所使用的数据类型 3 问题3enum的作用域 4 不同编译器解决该问题的方法不统一 enum class 和 enum struct 1 enum

Sei的博客 1万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

V4L2命令之 VIDIOC_ENUM_FMT VIDIOC_ENUM_FRAMESIZES VIDIOC_ENUM_FRAMEINTERVALS

http://linuxtv.org/downloads/v4l-dvb-apis/vidioc-enum-frameintervals.html VIDIOC_ENUM_FMT Name VIDIOC_ENUM_FMT — Enumerate image formats  // 列举设备所支持的格式 Synopsis int ioctl( in

woxx 1万+

enum 实现接口 JAVA

我整理的一些关于【Java】的项目学习资料(附讲解~~)和大家一起分享、学习一下:https://d.51cto.com/bLN8S1使用 Enum 实现接口的探讨 在 Java 中,枚举类(enum)是一种特殊的类,旨在处理固定数量的常量。在许多情况下,enum 不仅可以用来定义常量,也可以用来实现接口。本文将探讨如何...

weixin_40694067的博客 188

mysql中enum的用法

字段类型长度/值*1整理属性Null默认2额外注释 enum 说明:enum类型的字段,若长度值写长度1/2,报错 (1)数据长度为1,则为0,1,2… (2)数据长度为2,则为00,01,02… 长度值:表示的值,而不是值得长度 1.数据长度为1,长度值‘0’,‘1’,‘2’ ...

weixin_30924239的博客 4612

实现接口的enum类

java里面的enum实现接口的写法也和class实现接口的写法稍有不同,比如,现在有一个接口如下: packagecn.cms.test; publicinterfaceShowInfo{ voidshow(); } 然后,又有一个enum类需要实现这个接口,总体上来说可以有两种写法,一种是常规写法,跟一个普通的class实现接口的写法没有任何区别: packagecn.cms.test; publicenumJavaEnum2implementsShowInfo...

xiaozhuangyumaotao的博客 541

java enum getname_Java获取给定Enum值的Enum名称

Java获取给定Enum值的Enum名称给定值,如何获取Java Enum类型的名称?我有以下适用于特定Enum类型的代码,我可以使其更通用吗?public enum Category {APPLE("3"),ORANGE("1"),private final String identifier;private Category(String identifier) {this.identifie...

weixin_34551660的博客 1848

利用libtooling提取C++中enum值与名的映射

之前的一篇文章中,有思考过如何将enum的值与名进行映射,其中一种方法是利用工具进行预处理生成。最近由于项目中有类似的需求,所以学习了libclang,写了一个小工具实现映射。 整体流程非常简单: 匹配enum声明的AST节点。 获取enum声明AST节点的类型(即枚举类名前面附上作用域) 获取enum声明所在文件名(用于过滤系统头文件中的枚举) 获取enum声明所在文件行号(可用于区分同一命名...

imred的专栏 1861

enum与typedef enum的用法

转载地址: http://blog.youkuaiyun.com/lvxiangan/article/details/20939379 一,两者的用法 枚举类型定义用关键字enum标识,形式为: enum 标识符 { 枚举数据表 }; 枚举数据(枚举常量)是一些特定的标识符,标识符代表什么含义,完全由程序员决定。数据枚举的顺序规定了枚举数据的序号,从0开始,依次递增。 enum status ...

0 4780

C++_enum枚举, enum class

catalogOverview Overview namespace WC{ enum EN1{ A, B, C = -100, D, E, F = 100, G, H }; / {0, 1, -100, -99, -98, 100, 101, 102} / 即使你没有设置“初值”, 他是自动有个“int范围的值” (貌似LL也可以) / 即,你就把他当成是“int”(虽然他的type不是int) / 当成是: int A = 0; (而且,他不是在enum EN1里的; 他

WChang的博客 1381

【mysql】ENUM类型

ENUM类型 ENUM类型也叫作枚举类型,ENUM类型的取值范围需要在定义字段时进行指定。设置字段值时,ENUM类型只允许从成员中选取单个值,不能一次选取多个值。 其所需要的存储空间由定义ENUM类型时指定的成员个数决定。 文本字符串类型 长度 长度范围 占用的存储空间 ENUM L 1 <= L <= 65535 1或2个字节 当ENUM类型包含1~255个成员时,需要1个字节的存储空间; 当ENUM类型包含256~65535个成员时,需要2个字节的存储

兮动人 8929
上一篇: Effective java读书笔记(2)
下一篇: Effective java读书笔记(3)
insanuscsdn
博客等级 码龄11年 1粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值