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

C++基础部分代码

C++ OOP面对对象 this指针
C:各种各样的函数定义 struct
C++:类==》实体的抽象类型
实体(属性,行为)-》ADT(abstract data type)
OOP语言的四大特征是什么?
抽象 封装/隐藏 继承 多态
访问限定符:public公有的 private私有的 protected保护的

#include<iostream>
#include<string>
using namespace std;#if 0const int NAME_LEN = 20;
class CGoods
{
public:		//给外部提供公有的成员方法,来访问私有的属性//做数据初始化void init(const char*name, double price, int amount);//打印信息void show();//给成员变量提供一个getXXX或setXXX的方法,类体内实现的方法,自动初始化inlinevoid setName(char *name){ strcpy(_name, name); }void setPrice(double price){ _price = price; }void setAmount(int amount){ _amount = amount; }const char *getName(){ return _name; }double getPrice(){ return _price; }int getAmount(){ return _amount; }private:	//属性默认私有的成员变量//对象内存大小的时候,对象的内存大小和成员变量有关char _name[NAME_LEN];//20-》24double _price;//8int _amount;//4-》8//24+8+8=40字节
};
void CGoods::init(const char*name, double price, int amount)
{strcpy(_name, name);_price = price;_amount = amount;
}
void CGoods::show()
{cout << "name:" << _name << endl;cout << "prrice:" << _price << endl;cout << "amount" << _amount << endl;
}
int main()
{
/*
CGoods可以定义无数的对象,每一个对象都有自己的成员变量,但是它们共享一套成员方法show()==>怎么知道处理哪个对象的信息?
inti(name,price,amount)==> 怎么知道把信息初始化给哪一个对象?类的成员方法一经编译,所有的方法参数,都会加一个this指针,接受调用该方法的对象的地址
void setName(this->char *name){};
*/CGoods good1;//类实例化了一个对象//good._price;//err//init(&good1,"面包", 10.1, 20);good1.init("面包", 10.1, 20);good1.show();//show(&good1);good1.setAmount(200);good1.show();CGoods good2;good2.init("冰箱",1980,20);good2.show();//new 的四种用法int *p1 = new int(10);int *p2 = new (nothrow)(int);const int * p3 = new  const int (2);//定位newint statu = 0;int *p4 = new (&statu)int(30);cout << "p4:" << *p4 << endl;//c和c++的开辟动态内存:new | mallocint *a = (int*)malloc( sizeof (int));if (a == nullptr){return -1;}free(a);int *a1 = (int*)malloc(sizeof(int)* 20);free(a1);int *b = new int(20);delete (b);int *b1 = new int[20]();delete[]b1;//&&专门用来引用右值类型,指令上,可以自动产生临时量int &&d = 20;//== const int &d = 20;//int &d1 = 10;//--err//不能用一个右值引用变量,来引用左值int &c = d; //右值引用变量本身是一个左值,只能有左值引用它c = 50;cout << "c=" << d << endl;return 0;}/*
构造函数和析构函数
OOP实现一个顺序栈
*/
class SeqStack
{
public://构造函数 SeqStack s1;	SeqStack s2(20)SeqStack(int size = 10)	//是可以带参数的,因此可以提供多个构造函数{cout << this << "SeqStack()"<<endl;_pstack = new int[size];_top = -1;_size = size;}//自定义构造函数 <=对象的浅拷贝有问题SeqStack(const SeqStack &src){cout << "SeqStack &src" << endl;_pstack = new int[src._size];for (int i = 0; i < src._size; i++){_pstack[i] = src._pstack[i];}_top = src._top;_size = src._size;}//析构函数~SeqStack()	//是不带参数的,所以析构函数只能有一个{cout << this << "~SeqStack()"<<endl;delete[]_pstack;_pstack = nullptr;}//赋值重载函数 s1 = s1void operator=(const SeqStack &src){cout << "operator=" << endl;//防止自赋值if (this == &src)return;//需要先释放当前对象占用的资源;delete[]_pstack;_pstack = new int[src._size];for (int i = 0; i < src._size; i++){_pstack[i] = src._pstack[i];}_top = src._top;_size = src._size;}/*void init(int size = 10){_pstack = new int[size];_top = -1;_size = size;}void release(){delete[]_pstack;_pstack = nullptr;}*/void push(int val){if (full())resize();_pstack[++_top] = val;}void pop(){if (empty())return;--_top;}int top(){return _pstack[_top];}bool empty(){ return _top == -1; }bool full(){ return _top==_size - 1; }private:int *_pstack;//动态开辟数组,存储顺序栈的元素int _top;//指向栈顶元素的位置int _size;//数组扩容的总大小void resize(){int *ptmp = new int[_size * 2];for (int i = 0; i < _size; i++){ptmp[i] = _pstack[i];//如果拷贝的是对象,对象指向了外部内存,那就出问题了(浅拷贝)//memcopy(ptmp,_psatck,sizeof(int)*_size);}delete[]_pstack;_pstack = ptmp;_size *= 2;}};
SeqStack gb;//全局构造在程序运行结束析构
int main01()
{//当我在堆区开辟内存,默认的析构函数不起作用,就需要自己deleteSeqStack *ps = new SeqStack(30);ps->push(70);ps->push(40);cout<<ps->top()<<endl;delete ps;//先调用ps->~SeqStack()+然后free(ps)//1.开辟内存	2.调用构造函数SeqStack s;//s.init(5);//对象变量初始化操作for (int i = 0; i < 15; i++){s.push(rand() % 100);}while (!s.empty()){cout << s.top() << " ";s.pop();}//s.release();//释放对象成员变量占用的外部堆内存(外部资源)SeqStack s2(20);//先进后出(构造析构)//s2.~SeqStack();//析构函数调用结束后,我们说对象不存在了//s2.push(30);//堆内存的非法访问,析构之后不可在访问对象的成员return 0;
}/*
this指针 =》类-》很多对象 共享一套成员方法
成员方法,方法的参数都会添加一个this指针构造函数:定义对象时,自动调用的;可以重载的;构造完成,对象产生了
析构函数:不带参数,不能重载,只有一个析构函数;析构完成,对象就不存在了16.深拷贝和浅拷贝
对象默认的拷贝构造是做内存的数据拷贝
关键是对象如果占用外部的内存,那么浅拷贝就出现问题了!*/
int main()
{SeqStack s;//没有提供任何构造函数的时候,会为你生成默认构造函数和默认析构函数SeqStack s1(10);SeqStack s2 = s1;//#1	默认拷贝构造函数,做直接内存数据拷贝//SeqStack s3(s1);//#2	//s2.operator=(s1);s1 = s1;return 0;
}#endif
#if 0
/*
17.拷贝构造函数和赋值重载函数应用代码实践*/
class String
{
public:String(const char *str = nullptr)//普通构造函数{if (str != nullptr){m_data = new char[strlen(str) + 1];strcpy(this->m_data, str);}else{//置为空,让下面的拷贝构造函数不用重新判断是不是有效字符m_data = new char[1];m_data = '\0';}}String(const String &other)//拷贝构造函数{m_data = new char[strlen(other.m_data)+1];strcpy(m_data, other.m_data);}~String(){delete[]m_data;m_data = nullptr;}//String& 是为了连续的operator的操作 s1=s2=s3String& operator = (const String &other)//赋值重载函数{if (this == &other){return *this;}m_data = new char[strlen(other.m_data)+1];strcpy(m_data, other.m_data);return *this;}
private:char *m_data;//用于保存字符
};int main()
{String str1;String str2("hello");String str3 = "world";String str4 = str3;String str5(str3);str3 = str4;return 0;
}
#endif
#if 0
//循环队列
class Queue
{
public:Queue(int size = 5){_pQue = new int[size];_front = _rear = 0;_size = size;}//可以限制用户使用拷贝和赋值构造函数//Queue(const Queue&) = delete;//Queue operator=(const Queue&) = delete;Queue(const Queue &src){_size = src._size;_front = src._front;_rear = src._rear;_pQue = new int[_size];for (int i = _front; i != _rear; i = (i + 1) % _size){_pQue[i] = src._pQue[i];}}Queue& operator=(const Queue &src){if (this == &src)return *this;delete[]_pQue;_size = src._size;_front = src._front;_rear = src._rear;_pQue = new int[_size];for (int i = _front; i != _rear; i = (i + 1) % _size){_pQue[i] = src._pQue[i];}return *this;}void push(int val)//入队操作{if (full())resize();_pQue[_rear] = val;_rear = (_rear + 1) % _size;}void pop()//出队操作{if (empty())return;_front = (_front + 1) % _size;}int front()//获取队头元素{return _pQue[_front];}bool full(){ return (_rear + 1) % _size == _front;}bool empty(){ return _rear == _front; }~Queue(){delete[]_pQue;_pQue = nullptr;}
private:int *_pQue;//申请数组的空间int _front;//队头int _rear;//队尾int _size;//扩容的大小void resize(){int *ptmp = new int[_size * 2];int index = 0;for (int i = _front; i != _rear; i = (i + 1) % _size){ptmp[index++] = _pQue[i];}delete[]_pQue;_pQue = ptmp;_front = 0;_rear = index;_size *= 2;}
};
int main()
{Queue q1;for (int i = 0; i < 20; i++){q1.push(rand() % 100);}while (!q1.empty()){cout << q1.front() << endl;q1.pop();}Queue q2 = q1;q1 = q2;return 0;
}
#endif#if 0
/*
18.构造函数初始化列表	:	可以指定当前对象成员变量的初始化方式
CDate信息 是 CGoods商品信息的一部分 a part of ... 组合关系(继承)
*/
class CDate
{
public:CDate(int y, int m ,int d)//自定义了一个构造函数,编译器就不会默认生成构造函数{_year = y;_month = m;_day = d;}void show(){cout << _year << "/" << _month << "/" << _day  << endl;}
private:int _year;int _month;int _day;
};class CGoods
{
public:CGoods(const char * n, double p, int a,int y,int m, int d):_date(y,m,d),_amount(a),_price(p)// #1 构造函数的初始化列表{// #2 当前类类型构造函数体strcpy(_name, n);//_price = p;//_amount = a;}void show(){cout << "name:" << _name << endl;cout << "price:" << _price << endl;cout << "amount:" << _amount << endl;_date.show();}
private:char  _name[20];double _price;int _amount;CDate _date;//成员对象};
int main()
{CGoods g1("苹果",9.8,3,2019,3,8);g1.show();return 0;
}class Test
{
public:Test(int data = 10) :mb(data), ma(mb){}void show(){cout << "ma:" << ma << "mb:" << mb << endl;}
private://成员变量的初始化和它们定义的顺序有关,和构造函数列表中出现的先后顺序无关;int ma;int mb;
};
int main()
{Test t1;t1.show();//ma:-858993460mb:10return 0;
}/*
19.掌握成员方法和区别
普通的成员方法 =》编译器会添加一个this形参变量
1.属于类的作用域
2.调用该方法时,需要依赖一个对象(常对象是无法调用的)
3.可以任意访问对象的私有成员变量 public,privatestatic静态成员方法 =》不会生成this形惨
1.属于类的作用域
2.用类名作用域来调用方法
3.可以任意访问对象的私有成员,仅限于依赖对象的成员(只能调用其他static静态成员)const常成员方法 =》const CGoods *this
1.属于类的作用域
2.调用依赖一个对象,普通对象或者常对象都可以
3.可以任意访问对象的私有成员,但是只能读,不可写
*/
class CDate{
public:CDate(int y, int m, int d)//自定义了一个构造函数,编译器就不会默认生成构造函数{_year = y;_month = m;_day = d;}void show()const{cout << _year << "/" << _month << "/" << _day << endl;}
private:int _year;int _month;int _day;
};class CGoods
{
public:CGoods(const char * n, double p, int a, int y, int m, int d):_date(y, m, d), _amount(a), _price(p)// #1 构造函数的初始化列表{// #2 当前类类型构造函数体strcpy(_name, n);_count++;//记录产生新对象的数量}//普通成员方法void show()//打印商品的私有信息 CGoods *this{cout << "name:" << _name << endl;cout << "price:" << _price << endl;cout << "amount:" << _amount << endl;_date.show();}//常成员方法:只要是只读操作的成员方法,一律实现成const常成员方法void show()const//const CGoods *this{cout << "name:" << _name << endl;cout << "price:" << _price << endl;cout << "amount:" << _amount << endl;_date.show();}//静态成员方法 没有this指针的static void showCount()//打印的是所有商品共享的信息{cout << "所有商品种类数量是:" <<_count << endl;//cout<<"name:"<<this->_name<<endl;//err}
private:char  _name[20];double _price;int _amount;CDate _date;//成员对象	1.分配内存 2.调用构造函数//int _count;//用来记录商品对象的总数量static int _count;//不属于对象,而是属于类级别的  声明};
//static 成员变量一定要在类外进行定义并初始化
int CGoods::_count = 0;
int main()
{CGoods g1("苹果1", 9.8, 3, 2019, 3, 8);g1.show();CGoods g2("苹果2", 9.8, 3, 2019, 3, 8);g2.show();CGoods g3("苹果3", 9.8, 3, 2019, 3, 8);g3.show();CGoods g4("苹果4", 9.8, 3, 2019, 3, 8);g4.show();//g2.showCount();//4CGoods::showCount();const CGoods g5("非卖品", 6.9, 4, 2022, 4, 6);g5.show();return 0;
}
#endif
/*
20.指向类成员(成员变量和成员方法)的指针
*/
class Test
{
public:void func(){ cout << "call Test::func" << endl;}static void static_func(){ cout << "Test::static_func" << endl; }int ma;static int mb;private:
};
int Test::mb = 0;
int main()
{/*无法从“int”转换为“int Test::*int Test::*p = &Test::ma;*p = 20;*/Test t1;Test *t2 = new Test();#if 0int Test::*p = &Test::ma;t1.*p = 20;cout << t1.*p << endl;//20t2->*p = 30;cout << t2->*p << endl;//30int *p1 = &Test::mb;*p1 = 40;cout << *p1 << endl;//40
#endif//指向成员方法的指针/*无法从“void(__thiscall Test::*)(void)”转换为“void(__cdecl *)(void)void(*pfunc)() = &Test::func;(*pfunc)();*/void(Test::*pfunc)() = &Test::func;(t1.*pfunc)();(t2->*pfunc)();//如何定义函数指针指向类的static成员方法呢?return 0;
}

相关文章:

C++基础部分代码

C OOP面对对象 this指针 C:各种各样的函数定义 struct C&#xff1a;类》实体的抽象类型 实体(属性&#xff0c;行为)-》ADT&#xff08;abstract data type) OOP语言的四大特征是什么&#xff1f; 抽象 封装/隐藏 继承 多态 访问限定符&#xff1a;public公有的 private私有的…...

neo4j(spring) 使用示例

文章目录 前言一、neo4j是什么二、开始编码1. yml 配置2. crud 测试3. node relation 与java中对象的关系4. 编码测试 总结 前言 图数据库先驱者 neo4j&#xff1a;neo4j官网地址 可以选择桌面版安装等多种方式,我这里采用的是docker安装 直接执行docker安装命令: docker run…...

链接升级:Element UI <el-link> 的应用

链接升级&#xff1a;Element UI 的应用 一 . 创建文字链接1.1 注册路由1.2 创建文字链接 二 . 文字链接的属性2.1 文字链接的颜色2.2 是否显示下划线2.3 是否禁用状态2.4 填写跳转地址2.5 加入图标 在本篇文章中&#xff0c;我们将深入探索Element UI中的<el-link>组件—…...

简单题26 - 删除有序数组中的重复项(Java)20240917

问题描述&#xff1a; java代码&#xff1a; class Solution {public int removeDuplicates(int[] nums) {if (nums.length 0) return 0; // 处理空数组情况int i 0; // 指向新数组中的最后一个不重复元素for (int j 1; j < nums.length; j) {if (nums[j] ! nums[i]) { …...

DFS:深搜+回溯+剪枝实战解决OJ问题

✨✨✨学习的道路很枯燥&#xff0c;希望我们能并肩走下来! 文章目录 目录 文章目录 前言 一 排列、子集问题 1.1 全排列I 1.2 子集I 1.3 找出所有子集的异或总和 1.4 全排列II 1.5 字母大小写全排列 1.6 优美的排列 二 组合问题 2.1 电话号码的数字组合 …...

命令语境中的“可以”的字词含义分析

摘要 在语言交流中&#xff0c;词汇的使用经常受到语境的影响。本文探讨了“可以”一词在上司与下属之间的互动中所表达的命令含义。通过分析语料和实例&#xff0c;发现“可以”在某些情况下并不传达许可的含义&#xff0c;而是被用作一种隐性命令。本文讨论了这一现象的成因…...

直播相关03-录制麦克风声音, ffmpeg 命名,使用命令行完成录音

一 ffmpeg 命令 ffmpeg arg1 arg2 -i arg3 arg4 arg5ffmpeg 全局参数 输入文件参数 -i 输入文件 输出文件参数 输出文件arg1&#xff1a;全局参数 arg2&#xff1a;输入文件参数 arg3&#xff1a;输入文件 arg4&#xff1a;输出文件参数 arg5&#xff1a;输出文件 二 ffprobe …...

VUE3中ref与reactive

ref&#xff1a;支持所有类型reactive&#xff1a;只支持引用类型(Obj&#xff0c;Array...)两者都是实现数据视图响应式 JS逻辑使用中 ref&#xff1a;需要使用.value reactive&#xff1a;不需要使用.value <el-button click"handle()" type"primary"…...

高职院校人工智能技术和无人机技术实训室建设方案

一、方案背景与需求分析 1.1 人工智能与无人机技术发展概况 人工智能&#xff08;AI&#xff09;和无人机技术作为当今科技领域的两大热点&#xff0c;正以前所未有的速度发展和渗透到各行各业中。根据国际数据公司(IDC)的报告&#xff0c;全球人工智能市场规模预计将在2024年…...

x-cmd pkg | shtris: 在终端体验经典的俄罗斯方块游戏

目录 简介首次用户技术特点竞品和相关项目进一步阅读 简介 shtris 是一个由 shell 脚本&#xff0c;参考 俄罗斯方块指南 (2009) 实现的俄罗斯方块游戏。 首次用户 本文的 demo 展现了如何通过 x-cmd 快速启动使用 shtris 。x-cmd也提供了1分钟教程可以帮你快速入门。 技术…...

Linux基础---07文件传输及解决yum安装失效的方法

Linux文件传输地图如下&#xff0c;先选取你所需的场景&#xff0c;若你是需要Linux和Linux之间传输文件就查看SCP工具即可。 一.下载网站文件 前提是有网&#xff1a; 检查网络是否畅通命令&#xff1a;ping www.baidu.com&#xff0c;若有持续的返回值就说明网络畅通。Ctr…...

[项目][WebServer][Makefile Shell]详细讲解

目录 1.Makefile2. build.sh3.test.sh 1.Makefile 为了方便构建项目&#xff0c;并将其发布&#xff0c;使用Makefile来管理构建项目 bin httpserver cgi test_cgi cc g GLD_FLAGS -stdc11 -D DEBUG_SHOW LD_FLAGS $(GLD_FLAGS) -lpthread src main.cc curr $(shell p…...

ElementUI大坑Notification修改样式

默认<style lang"scss" scoped>局部样式&#xff0c;尝试用deep透传也无效 实践成功方法&#xff1a;单独写一个style <style> .el-notification{position: absolute !important;top: 40% !important;left: 40% !important; } </style> 也支持自…...

vivado中的diagram

在 Vivado 中&#xff0c;“Diagram” 选项卡是 IP Integrator 的一部分&#xff0c;它用于创建和编辑 Block Design。Block Design 是一种图形化的设计方法&#xff0c;它允许设计者通过拖放组件&#xff08;如 IP 核和自定义模块&#xff09;并连接它们来构建复杂的数字电路设…...

项目实现:云备份②(文件操作、Json等工具类的实现)

云备份 前言文件操作实用工具类设计文件属性的获取文件的读写操作文件压缩与解压缩的实现文件目录操作 Json 实用工具类设计编译优化 前言 如果有老铁不知道当前项目实现的功能是什么的话&#xff0c;可以先移步这篇文章内容&#xff1a; 云备份项目的介绍 其中介绍了云备份项…...

‌内网穿透技术‌总结

内网穿透是一种网络技术&#xff0c;通过它可以使外部网络用户访问内部网络中的设备和服务。一般情况下&#xff0c;内网是无法直接访问的&#xff0c;因为它位于一个封闭的局域网中&#xff0c;无法从外部访问。而通过内网穿透&#xff0c;可以将内部网络中的设备和服务暴露在…...

Git使用—把当前仓库的一个分支push到另一个仓库的指定分支、基于当前仓库创建另一个仓库的分支并推送到对应仓库(mit6828)

把学习过程中遇到的Git问题汇总如下&#xff08;后续学习遇到问题会及时更新此专栏&#xff09;&#xff1a; Git原理及常用命令小结——实用版&#xff08;ing......&#xff09;、Git设置用户名邮箱-CSDN博客 解决git每次push代码到github都需要输入用户名以及密码-CSDN博客…...

windows11+ubuntu20.04.6双系统安装

记录win11和ubuntu20.04.6在单个硬盘上安装的主要流程 系统说明 BIOS模式&#xff1a; UEFI 硬盘&#xff1a; 1TB固态 内存&#xff1a; 32GB 步骤 1、 准备两个不小于16GB的U盘&#xff0c;一个用于装Windows&#xff0c;一个用于装ubuntu&#xff0c;注意8G的U盘虽然能够…...

如何通过 PhantomJS 模拟用户行为抓取动态网页内容

引言 随着网页技术的不断进步&#xff0c;JavaScript 动态加载内容已成为网站设计的新常态&#xff0c;这对传统的静态网页抓取方法提出了挑战。为了应对这一挑战&#xff0c;PhantomJS 作为一个无头浏览器&#xff0c;能够模拟用户行为并执行 JavaScript&#xff0c;成为了获…...

ARM驱动学习之8 动态申请字符类设备号

ARM驱动学习之8 动态申请字符类设备号 KernelCode: • 字符设备函数在文件“include/linux/fs.h”中 • alloc_chrdev_region() 是动态分配主次设备号。 • 宏定义MAJOR提取dev_t数据中的主设备号源码&#xff1a; /*** alloc_chrdev_region() - register a range of char dev…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了&#xff0c;就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看

文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...

人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent

安全大模型训练计划&#xff1a;基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标&#xff1a;为安全大模型创建高质量、去偏、符合伦理的训练数据集&#xff0c;涵盖安全相关任务&#xff08;如有害内容检测、隐私保护、道德推理等&#xff09;。 1.1 数据收集 描…...

go 里面的指针

指针 在 Go 中&#xff0c;指针&#xff08;pointer&#xff09;是一个变量的内存地址&#xff0c;就像 C 语言那样&#xff1a; a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10&#xff0c;通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...

阿里云Ubuntu 22.04 64位搭建Flask流程(亲测)

cd /home 进入home盘 安装虚拟环境&#xff1a; 1、安装virtualenv pip install virtualenv 2.创建新的虚拟环境&#xff1a; virtualenv myenv 3、激活虚拟环境&#xff08;激活环境可以在当前环境下安装包&#xff09; source myenv/bin/activate 此时&#xff0c;终端…...