dlang语法的简单整理

2023-05-16

dlang整理

为什么使用dlang

优点:
    快速,开发高效的,方便,无虚拟机的,快速的,高性能的,垃圾回收
缺点:
    语法较为复杂,支持gc

曾经很喜欢dlang,资料少,竟然没有招聘用dlang的,so,只能偶尔玩玩。

基础类型和变量定义

基础类型
    char,byte,short,int,long,float,double bool,string, wstring,dstring
定义类型
    int a=1;
    auto a = 2;
类型 typeid,typeof   typeid(typeof(a))
定义固定数组 int[3] arr=[1,2,3];
定义动态数组  auto arr2[] = [1,2,3];
定义关联数组 int[string] arr3 = ["pi":1,"perl":2];
定义函数auto func = function double(int x){return x/10.0;}
如果函数想运用外部变量使用delegate代替function 
        float x = 10.0;
        auto func2 = delegate double(int y){return y/x};
 显示类型
    typeid(typeof(a))  或者 typeof.stringof
 类型强制转换 
    cast(float)a
 使用is判断类型
    是否存在类型 is(int[])  is(add) is(f2)
    类型是否相同 is(int == uint)
    类型是否能格欧转换  is(int : long)
    专用的检测类型 is(typeof(f2) == function)

语句

 变量声明语句什么的就不再赘述了
 if else while do while for  与c一直不再特别的说明
 dlang可以随意定义内部的临时变量
    {
        int ib = 12;
    }
 static if  静态条件编译,有点像#ifdef #else #endif
    static if(#静态条件){
        //do1
    }else{
        //do2
    }
 final switch 强制条件覆盖,条件必须是静态数据
     final switch(s1){
        case  c1:
            do;
            break;
        case c2:
            do;
            break;  
     }
with 定义结构变量
        point p;
        with(p){
            x = 1;
            y = 2;
        }
退出时的执行scope(success),scope(faild)
代码退出时按照栈执行的,先进后出
        scope(success){
            do1
        }
        scope(success){
            do2
        }

数组

在D语言中的数组是胖指针。 头指针+长度 或者头指针+尾指针
在D语言中动态数组和静态数组会有一点不同。
定义动态数组
    int[] arr = new int[10];
    int[3] arr2 =[1,2,3];
动态数组长度
    writeln(arr.length);
动态数组的拷贝
    动态数组的复制会引用同一份副本
        auto arr3 = arr;
        arr3[0] = 1;
        assert(arr[0] ==1);
    如果真的需要复制可以采用
        auto arr4 = arr.dup;
        arr4[0] = 3;
        assert(arr[0] != 3);
 数组拼接
        arr = arr ~ 11;
 数组分割
    arr[1..2];
 数组支持的基本运算
    + - * 、 % ^ & ~ = += -= *= /= %= ^= &= |=
    arr5[] = arr2[] + arr1[]
 数组的扩张和收缩
    arr ~= 13;
    arr.length = 100;
    arr[1..$-1];
 数组的遍历
    foreach(v;arr) writeln(v);
    foreach(ref v;arr) v++;
 静态数组的声明
    int[3] arr10 = [1,2,3];
 静态数组可以支持边界检查
 静态数组的切割会产生动态数组
 静态数组的复制可以产生新的数组
    auto arr11 = arr10;
    arr11[0] =123;
    assert(arr10[0] != 123);
 多维数组不再多说,和其他语言类似
 关联数组
    定义
        int[string] arr2 = ["a":1,"b":2];
    长度
        assert(arr2.length == 2)
    赋值
        arr2["a"] = 11;
    获取值
        arr2.get("a",1234); //如果取不到则为1234
    删除值
        arr2.remove("a");
    遍历
        foreach(k,v;arr){
            write(k,"=>",v,"\t");
        }

函数

基本的函数
    bool max(int a,int b){
        return a > b;   
    }
动态数组传递给函数
    void func(int x){x++;}
    void gunc(int[] x){x=[2,3,4];}
    void sunc(int[] x){x[0] = 21;}
    auto x = [111,222];
    gunc(x);
    assert(x == [111,222]);
    sunc(x);
    assert(x==[21,222]);
ref修改变量的值
    void change(ref int x){x++;};
    int x = 11;
    change(x);
    assert(x == 12);
函数返回refer
    ref int getX(int x){return x;}
    int x11 = 12;
    int y =0;
    y = getX(x11);
    y++;
    assert(x11 == 12);
in和out修饰符
    in 让参数只可以读,out允许外部向内部传入值
    此时y相当于前面加了ref
    int func_inout(in int x,out int y){
        y = x+1;
        return x;
    }
静态变量
    static int fc = 1;
    void func_static(int x){fc++;}
查找函数
    bool find1(int[] arr,int val){
        foreach(v;arr){
            if(v == val) return true;
        }
        return false;
    }
    int[] find2(int[] arr,int val){
        while(arr.length > 0 && arr[0] != val){
            arr = arr[1..$];
        }
        return arr;
    }
查找函数中添加泛型
    T[] find3(T)(T[] arr,T val){
        while(arr.length > 0 && arr[0] != val){
            arr = arr[1..$];
        }
        return arr;
    }
   int[] list = [1,2,3,4,5];
   assert(find3!(int)(list,3) == [3,4,5]);
对于多个类型的情况,可以在函数前面增加参数约束。
    T[] find4(T,E)(T[] arr,E val)
    //T和E能相互转化
    if(is(typeof(arr[0] != val) == bool))
    {
        while(arr.length > 0 && arr[0] != val){
            arr = arr[1..$];
        }
        return arr;
    }
    assert(find3(list,3) == [3,4,5]);
让t变得更加通用,在一个数组中寻找另外一个数组
    T[] find5(T,E)(T[] arr,E[] arr2)
    if(is(typeof(arr[0..1] == arr2) : bool))
    {
        while(arr.length > arr2.length){
            if(arr[0..arr2.length] == arr2) break;
            arr = arr[1..$];
        }
        return arr;
    }
函数的优先调用
        bool myprint(int x){
            return is(typeof(x) == int);
        }

        bool myprint(double x){
            return is(typeof(x) == double);
        }
        myprint(1);//优先调用myprint(int x)
函数别名调用
    T[] finderSenior(alias func,T)(T[] input)
    if(is(typeof(func(T[0])) == bool))
    {
        for(;input.length > 0;input = input[1..$]){
            if(func(input[0])) break;
        }
        return input;
    }
    auto senior_list = [22,3,12,-7,-9,32];
    assert(findSenior!(function bool(int x){return x > 30;})(senior_list) == [32]);
    int z = 30;
    //senior function delegate调用委托函数。委托函数可以访问外部变量
    assert(findSenior!(delegate bool(int x){return x > z;})(senior_list) == [32]);
    auto myfunc = function bool(int x){ return x < 0;};
    auto senior_list2 = findSenior!(myfunc)(senior_list);
    //auto list2 = findSenior!(myfunc,int)(list);
    assert( senior_list2 == [-7, -9, 32]);
函数内部的函数
    int[] outfunc(int[] input,int z){
        bool infunc(int x){
            return x >= z;
        }
        static int zz = 30;
        static bool infunc2(int x){
            return x > zz;
        }
        return finderSenior!(infunc)(input);
    }
闭包
    T[] delegate(T[])find9(T)(T x)
    if(is(typeof(x == x) == bool))
    {
        return delegate(T[] a){return findList(a,x)};
    }
    auto delegate_func = finder(5);
    auto delegate_func_new = finder("ho");
    //senior function test
    auto senior_list = [22,3,12,-7,-9,32];
    int z = 30;

    assert(delegate_func([1,2,3,4,5,6]) == [5,6]);
    assert(delegate_func_new(["hi","ho","wo"]) == ["ho","wo"]);
可变参数的函数,参数结构相同
    double avg(double[] values...){
        return reduce!((a,b){return a+b;})(0.0,values)/values.length;
    }

可变参数的函数,参数结构不相同
    void writeln_m(T...)(T args){
        foreach(arg;args){
            stdout.rawWrite(to!string(arg));
        }
        stdout.rawWrite("\n");
        stdout.flush();
        foreach(k,v;args){
            writeln(k,":",typeid(T[k]),"~~",v);
        }
    }
    writeln_m(1,2,1.1,"hell",[1,23]);
元组--打包函数参数
    Tuple!(int,double) tv = tuple(1,1.2);
    void fun(T...)(T args){
        gun(tuple(args));
    }
    void gun(T)(T value){
        writeln(value.expand);
    }
纯函数
    pure int mypure(int x){
        return x+10;
    }
不抛出异常的函数
    nothrow void tryThrow(){
        try{
        }catch(Exception e){
        }
    }

类支持各种类型的变量
非静态的,静态的,静态的变量初始化一次后不可改变
支持普通方法
构造器语法this() ~this()
也支持静态构造器static this() static ~this();
静态构造方法在构造方法前面运行
final可以定义不可覆盖的类       
类也支持property方法           
this() 的执行顺序是: 分配内存,初始化,冠名,构造函数的调用
~this()的步骤 对象冠名后是活的。所有引用消失,检查是否可以回收,某个时间点回收,释放已解除分配的对象

继承与接口

子类B会自动调用父类A的构造方法
子类要覆盖父类的方法必须添加override关键字
final可以修饰类,方法,和变量,被修饰的类,方法,变量禁止覆盖
也支持子类向上转型为父类,但是不支持父类转型为子类
也支持抽象类,使用abstract关键字
d语言中所有的类都有共同的父类object
object自带如下方法
    toString 
    toHash 
    opEquals(Object ths)
    opCmp(Object ths) 
    static Object factory(string classname)
d语言的接口可以增加修饰符 private protected public 
d语言也支持抽象类,使用abstract语法。
d语言也支持,内中嵌套类,方法中嵌套类,

结构体

结构体和类的不同我也很困惑,我的理解,class表示逻辑操作,struct表示数据对象
列举下类和struct的不同
    结构体能代替对象,反过来不行
    结构体不支持继承和接口的实现
    在结构体内不支持super
    结构体不允许改写,所有方法都是最终的
    结构体不能喝synchronized和struct一起使用
    struct不支持默认的构造方法this()
    struct不支持定义构造方法this(this)
    结构体不支持protected修饰符
结构体的复制,是值传递,对象是引用
    比如 xx s1;auto s2 = s1;s1和s2指向两个不同的对象
结构对象传递给函数是值传递
结构对象的生命周期非常有限,类似函数里面临时变量的周期
构造函数,
    默认不运行代码实现this()构造器
    但是声明的时候可以使用默认的
转发构造函数是被允许的
this(this)如果结构里面含有引用类型数据
    可以使用this(this)在拷贝的时候做些特别的操作
可以定义一个析构函数~this()
可以定义任意数量的的静态构造器和析构函数
结构可以定义方法和静态方法
@property支持属性的方式调用方法
结构内部可以嵌套类和结构
类内部也可以嵌套结构和类
#disable可以禁用一些方法
结构体的偏移align消除结构见的间隙
联合union和c语言一样
枚举值和枚举类型
    enum ae =123;
    enum a1{aa,ab,ac};

tuples,alias和mixin 模板注入代码 泛型

tuple不可改变的元组
    导入import std.typecons; 包
    定义 auto tuple1 = tuple(1,"tutples");
    或者 auto tuple1 = Tuple!(int,"id",string,"value")(12,"tom");
访问元组
    tuple1[0],tuple1[1]
元组可以扩展
    myTuple.expand
元组也可以剪切
    myTuple[$-2..$]
alias有三种格式
    alias new_name = existing_name;
    alias existing_name new_name;
    alias expression alias_name ;
    别名方法,别名tuple,别名常用类型,别名类,别名this
泛型基础语法 xx(T,E,XX..) class xxx(T)
泛型分三种情况
    方法泛型 funcname(T)()  调用 funcname!(int)()
    方法多参数泛型funcname(T,E)()
    类的泛型  class xxx(T)  classname A!T a= new  classname A!T()
mixin 基础语法 mixin (compile_time_generated_string) 
mixin归纳成三种情况
    字符串注入 mixin(xxx)
    模板注入 mixin xxx!(x,x)
    命名空间注入 mixin xxx a

修饰符,错误处理,契约编程 模块重载

immutable 
    可以用来修饰方法参数也可以修饰构造函数
    immutable int[] 和imutable(int)[]是不同的前者是整个数组后者只针对部分变量
    一个例子看出不同
        immutable(int[]) a = [1,2,3];
        //a[0] = 11;//错误
        //a = [3,2,1];//错误
        immutable(int)[] b = [1,2,3];
        //b[0] = 11;//错误
        b = [3,2,1];//正确
    构造函数的例子
        this() immutable{
            count = 1;
            desc = "done";
        }
        immutable(BookOperator) bo = new immutable(BookOperator);
const 用来修饰常量
错误处理
    异常继承Exception 
    函数可以声明为nothrow
    捕获异常还是try-catch-finnaly体系
契约编程
    判断输入,判断输出,判断返回结果 in{} out{} body{}
模块的问题
    定义模块module company.employee;
        company文件下的employee类或者struct
    模块的导入默认只会导入我们需要的
        例如import std.stdio  只会导入stdio下的方法或者是类
        -Ipath         where to look for imports
        跨模块重载-排序的,避免的冲突
    别名
        import widget:fun,gun;
        import list = util.container.finite.linear.list;
        alias util.container.finite.linear.list list;
    导入所有的包。public import
        module animal;
        public import animal.cat;
        public import animal.dog;
        public import animal.horse;
    static import
    deprecated声明。
        deprecated("Please use doSomething() instead.")
    模块的析构函数和构造函数
        static this() and static ~this()
        能加上shared表示所有模块共享
        构造函数的顺序和析构函数的顺序是反的
        不同模块间的构造方法依次导入
    安全性 @safe @trusted @system 可以在编译的时候加上条件
    调用c语言
        todo
    debug(level)
    version(tag)

重载

Operators对象的基本操作,操作符重载
一元重载
    - + ~ * ++ --
    XX opUnary(string op)(){}
     例如
  Box opUnary(string op)()
  {
      if(op == "++")
      {
         Box box = new Box();
         box.length = this.length + 1;
         box.breadth = this.breadth + 1 ;
         box.height = this.height + 1;
         return box;
      }
  }
二元重载
    + - * / % ^^ & | ^ << >> >>> ~ in
     Box opBinary(string op)(Box b)
  {
     if(op == "+")
     {
        Box box = new Box();
        box.length = this.length + b.length;
        box.breadth = this.breadth + b.breadth;
        box.height = this.height + b.height;
        return box;
      }
  }
比较重载
    < <= > >=
    int opCmp(const ref Box box) const{}

并发编程

如何启动线程
    使用std.concurrency
    通过spawn方法spawn(&func,arguments..)
使用immutable 实现消息共享
数据传递
    发送消息tid.send(tid,argu..)
    接收消息
    receive(
        (string s){},
        (int x){},
    );  
    receiveTimeout(
    );
共享类型shared
    可以修饰变量
    修饰结果或者类
基于锁的同步synchronized
    可以修辞类和方法
避免死锁
pragma 用于编译器的提示信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

dlang语法的简单整理 的相关文章

  • matlab中函数的定义和使用

    在matlab的选择框中的的新建中选择新建函数 xff0c 一般是以 m的文本文件 xff0c 新建后我们可以在里面写入我们的实现函数 xff0c 现在我们给出两个实例看一下 xff0c 分别是简单的求和和Fibonacci sequenc
  • matlab简单绘图plot,subplot

    a1 二维绘图plot的实现 subplot n m x 建立一个m n的绘图区域 xff0c 然后分别在其x 61 1 xff0c 2 xff0c 3 xff0c 4 区域绘制图像 function 61 plot1 x 61 0 0 3
  • python 函数的定义和应用

    1 xff0c 函数定义和使用 xff1a def substract sub a sub b sub res 61 sub a sub b return sub res sub test 61 substract 10 20 print
  • Linux shell中的-d,-f,-e,-n的作用

    1 xff0c d gt dirtionnary 判断目录是否存在 例 xff1a d tmp 返回为真便是 tmp是文件夹目录 2 xff0c e gt exist 判断是否存在 例 xff1a e filename 返回为真表示file
  • 「第四范式」2023届-秋季校园招聘正式启动!

  • Linux下用nginx和naxsi搭建web防火墙

    Linux下用nginx和naxsi搭建web防火墙 Naxsi Naxsi是一个开源 xff0c 高性能 xff0c 地位会规则 xff0c nginx的web应用程序防火墙模块 xff0c 著名的web服务器和反向代理 xff0c 它的
  • 【语义分割】类别不平衡损失函数合集

    在语义分割领域 xff0c 我们会常常遇到类别不平衡的问题 比如要分割的目标 xff08 前景 xff09 可能只占图像的一小部分 xff0c 因此负样本的比重很大 xff0c 导致网络倾向于将所有样本判断为负样本 本文介绍了在数据不平衡时
  • 小张学linux内核:十四. elf文件的加载和进程切换寄存器的保存

    重点关注虚拟内存的切换 xff0c pgd xff0c mm struct start code xff1b 理清楚这三个概念 pgd不是在这里设置的遵循COW xff0c 是在写时缺页中断填充的 start code只是一个段开始的标记
  • linux软中断和系统调用深入研究

    arm软中断模式 arm7种模式 有中断模式 xff0c 但是并没有软中断模式 那么arm的软中断是什么呢 xff1f arm的软中断是arm从用户模式切换到特权模式 xff0c 也就是linux中从用户态切换到内核态的过程 swi命令触发
  • 进程proc文件介绍

    进程proc文件 proc pid 下是每个进程的proc信息 xff0c proc self比较特殊 xff0c 哪个进程打开 xff0c 对应链接到哪个进程 1 xff09 内存相关 status xff1a 进程使用虚拟内存和物理内存
  • Win10系统下安装CAA二次开发程序,VS界面上不出现CAA菜单栏或菜单栏为灰色的

    问题描述 xff1a Win10系统下安装了CATIA CAA V5R19和V4R24两个版本 xff0c 其中V5R19版本安装完成后VS2005中没有出现CAA菜单栏 xff0c V5R24安装完成后VS2008中出现部分集成菜单且为灰
  • 基于Stm32的4G模块实现内网透传通信(代码后附)

    基于Stm32的4G模块实现内网透传通信 一 内网透传即内网映射 xff0c 内网IP端口映射外网连接访问过程的实现 内网透传通信实现过程又有以下几种区别 xff1a 1 xff09 路由器映射 适合自己本地路由有公网IP网络环境 xff0
  • RoboCup智能机器人足球教程(二)

    RoboCup智能机器人足球教程 xff08 二 xff09 运行方式 RoboCup2D仿真平台通过一个服务端 xff0c 若干客户端联系而成 xff0c 同时通过监视器进行画面播放 当启动服务端后 xff0c 客户端通过改写程序内部的c
  • RoboCup智能机器人足球教程(三)

    RoboCup智能机器人足球教程 xff08 三 xff09 实现守门员代码 守门员逻辑实现比较容易 xff0c 但是最好开始的时候画好流程图 xff0c 理顺逻辑 xff0c 守门员一直盯着球 xff0c 当球距离守门员够近的时候 xff
  • 嵌入式工作一年总结

    其实这是去年2017年11月份写的 xff0c 现在想把这个发出来 xff0c 为后来的同学或者迷茫的一些同学的一些建议吧 xff01 刚入行回忆 刚开始进入公司的能力很差 xff0c 可以说什么都不会吧 xff0c wifi拼成wife
  • CVPR 2019 | 旷视研究院提出新型损失函数:改善边界框模糊问题

    全球计算机视觉三大顶会之一 CVPR 2019 xff08 IEEE Conference on Computer Visionand Pattern Recognition xff09 将于 6 月 16 20 在美国洛杉矶如期而至 届时
  • ros中使用opencv处理图像

    cv bridge toCvCopy xff1a ROS下的sensor msgs ImageConstPtr xff0c 和图像压缩类型 xff08 例如 xff1a sensor msgs image encodings RGB8 xf
  • PX4飞行日志分析与.ulg文件格式转换

    文章目录 一 FlightPlot安装及使用二 ulg文件格式转换 xff08 windows环境 xff09 一 FlightPlot安装及使用 span class token number 1 span xff09 下载FlightP

随机推荐

  • 【深入理解Java虚拟机 笔记】Java的类加载过程

    类加载的过程如下图所示 xff1a 一 加载阶段 注意 xff1a 这里的 加载 阶段是整个 类加载 过程的一个阶段 xff0c 两个词的含义是不一样的 这个阶段主要做3件事 xff1a 1 通过类的全限定名获取二进制字节流 xff1b 2
  • 【深入理解Java虚拟机 笔记】垃圾回收算法

    前言 当前垃圾回收集器大多都是遵循分代收集理论进行设计的 xff0c 先聊聊什么是分代收集 xff1a xff08 1 xff09 弱分代假说 xff1a 绝大多数对象都是朝生夕灭的 xff1b xff08 2 xff09 强分代假说 xf
  • 【日记 2021-05-01】 leetcode练习&& Linux修改文件权限

    题目 xff1a 1335 工作计划的最低难度 题目内容 xff1a 你需要制定一份 d 天的工作计划表 工作之间存在依赖 xff0c 要想执行第 i 项工作 xff0c 你必须完成全部 j 项工作 xff08 0 lt 61 j lt i
  • 【Leetcode 刷题笔记】16. 3Sum Closest

    题目 方案一 xff1a 穷举法 o n 3 span class token keyword class span span class token class name Solution span span class token pu
  • 【Debugging】SpringSecurity iframe 页面不显示

    问题描述 如下图所示 xff0c 配置了SpringSecurity后 xff0c 网页就加载不出来了 xff0c 多次检查代码都没有问题 xff0c 折腾了好久 xff01 xff01 xff01 解决方案 在SpringSecurity
  • 【日记 2021-05-14】树莓派获取环境亮度(光照度)

    什么是亮度 xff1f 光照度指被照射物体单位面积上所接受可见光的光通量 xff0c 单位是勒克斯 Lux 或流明每平方米 lm m2 xff0c 是用来描述光的亮度的 我们平时最关心的我家灯到底够不够亮 xff0c 具体数值可以用照度计测
  • 【Java】语法糖

    什么是语法糖 xff1f 语法糖就是指 java 编译器把 java 源码编译为 class 字节码的过程中 xff0c 自动生成和转换的一些代码 有哪些语法糖 xff1f 默认构造函数 xff1a 当一个类没有显式的提供构造函数时 xff
  • 【Java多线程】FutureTask的使用示例

    炎热的夏天 xff0c 一位少侠到客栈吃杯茶 xff0c 客栈准备茶水有如下两种方式 xff1a 单线程 先擦桌子 xff0c 花费3秒 xff1b 再准备茶水 xff0c 花费3秒 xff1b 共花费6秒 xff01 多线程 擦桌子和准备
  • 旷视研究院博士图鉴|Be that challenger

    图为旷视研究院日常工作一景 旷视研究院有这样一批挑战者 他们是 PhD xff0c 更是 Researcher 他们 深入探索科技发展的前沿阵地 笃信自己的科研价值 渴望见证一行行代码的快速落地 期待与同样优秀的人碰撞思维 做自己所爱的事
  • 【Java多线程】CompletableFuture的使用示例

    刘备 关羽和张飞三兄弟在家吧喝酒 xff0c 突然发现忘带钱了 xff0c 于是差下人回去取钱 为了不影响三兄弟喝酒的气氛 xff0c 刘备吩咐下人钱取来后交给旁边侍候的赵云即可 span class token keyword publi
  • 【Java基础】Arrays.sort()使用示例

    狗有名字 体重和年龄3个属性 xff1a span class token keyword public span span class token keyword class span span class token class nam
  • 【Spring】aop的使用示例

    场景 去饭店吃饭的时候 xff0c 在进入饭店时门卫会为你开门 xff0c 并问候说 欢迎光临 xff0c 当你吃完离开时 xff0c 门卫会说 请慢走 xff0c 欢迎下次光临 此场景下涉及如下两个角色 xff1a 顾客 xff08 cu
  • 关于从Github上下载历史版本

    第一步 打开一个仓库 xff0c 可以看到此时在主分支下 xff0c 点击1位置查看历史版本 第二步 现在可以查看到所有的版本 xff08 提交 xff09 信息 xff0c 单击2位置进入该版本 第三步 单击3位置浏览并打开该版本 第四步
  • 数据结构——结构体

    结构体是一种复合数据类型 xff0c 定义了一组变量列表 xff0c 这些变量将放在一个内存块中的名称下 它允许通过使用指向结构的一个指针来访问不同的变量 struct structure name data type member1 da
  • python 归并排序

    归并排序 xff08 Merge Sort xff09 是一种典型的递归法排序 它把复杂的 排序过程分解成一个简单的合并子序列的过程 至于怎么得到这个子 序列 xff0c 就得自己调用自己了 归并排序首先要做的就是将数列分成左右两部分 xf
  • ROS学习笔记—— rospy

    所有资料均来自于 https www icourse163 org learn ISCAS 1002580008 learn announce 和 https github com DroidAITech ROS Academy for B
  • XCOM(串口监视器,无单片机)+ESP8266显示心知天气天气信息

    XCOM xff08 串口监视器 xff0c 无单片机 xff09 43 ESP8266显示心知天气天气信息 ESP8266 AT指令显示 这是第一次写博客 xff0c 写的内容尽量通俗易懂贴近生活 PS 写的不好务必不要打我 ESP826
  • Linux编程——交叉编译器基本指令介绍

    Linux编程 交叉编译器基本指令介绍 arm span class token operator span linux span class token operator span gnueabihf span class token o
  • 马尔可夫链蒙特卡洛采样(MCMC)

    首先我们要明确的是马尔可夫链蒙特卡洛采样以下简称MCMC xff0c 它首先是个采样方法 1 采样的目的 采样作为任务 xff0c 用于生成新的样本求和 求积分 比如我们知道样本z的后验分布 我们经常会有一个需求 xff0c 得到目标函数f
  • dlang语法的简单整理

    dlang整理 为什么使用dlang 优点 xff1a 快速 xff0c 开发高效的 xff0c 方便 xff0c 无虚拟机的 xff0c 快速的 xff0c 高性能的 垃圾回收 缺点 xff1a 语法较为复杂 xff0c 支持gc 曾经很