- 博客(80)
- 资源 (1)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 四足机器人对角双足两点支撑平衡控制
四足机器人具有高机动性,环境适应能力强,在军事、救援、巡检等领域具有广阔的应用前景。西安交通大学系统工程研究所智能机器人研究团队针对自主设计的四足机器人,成功研究双足支撑静平衡控制方法,使四足机器人仅依靠对角双足两点支撑,就可以在较长时间内保持身体平衡。这为后续研究四足机器人在狭窄平衡木上行走打下了良好的基础。相关视频链接:https://www.bilibili.com/video/BV1ep4y1i7rR...
2020-07-17 17:11:07
989
原创 linux 下的 .a 文件 .o 文件 是什么文件?各有什么作用?
.o 就是object, 也就相当于windows下编译的obj文件, 俗称目标文件..a 就是archive, 也就相当于windows的VC下编译的lib文件, 俗称静态库文件..o文件是链接文件,.a是静态库文件,靠.o文件生成,作为一个库为外部程序提供函数,接口。生成.o文件:gcc -c test.o test.c生成.a文件:ar cqs test.a test.o.o 就相当于windows里的obj文件 ,一个.c或.cpp文件对应一个.o文件.a 是好多个.
2022-05-18 23:11:41
635
原创 在Ubuntu 20.04 LTS Focal Fossa上安装VMware Tools
首先,通过apt在终端中运行以下命令,确保所有系统软件包都是最新的。sudo apt updatesudo apt upgrade然后,在Ubuntu 20.04上安装VMware Tools。运行以下命令以安装VMware Tools服务器:sudo apt install open-vm-tools如果您正在运行Ubuntu Desktop,请运行以下命令来安装VMware Tools:sudo apt install open-vm-tools-desktop最后,重新启动虚拟机,..
2022-05-18 23:09:39
369
原创 纯虚函数的应用
纯虚函数的定义 在C++中,只有虚函数才能被声明为纯虚函数,语法格式为:virtual 返回值类型 函数名(函数参数)=0;其中,纯虚函数没有函数体,只有函数声明,也就是在类中的虚成员函数后面加上=0,来表示这是一个纯虚函数。 2. 纯虚函数的应用 包含纯虚函数的类称为抽象类,所谓的抽象类也就是所无法被实例化,这是因为该类中的纯虚函数只有声明,而没有定义,所以无法被实例化,因而无法创建对象。抽象类通常作为基类,让派生类去实现纯虚函数的定义,派生类必须完整的实现纯...
2020-10-27 21:29:24
1188
原创 C/C++中sizeof(),strlen(),length(),size()的区别
C/C++中sizeof(),strlen(),length(),size()的区别C/C++中经常会碰到获取字符串长度的问题,比较常见的有以下四种方式:sizeof(),strlen(),length(),size(),那么这四种方式究竟有什么区别呢?一、sizeof()定义sizeof()是一个操作符,注意不是函数,其作用是返回一个对象或类型所占的内存字节数。语法sizeof有三种语法形式:1) sizeof(object); //sizeof(对象)2)sizeof object;
2020-10-21 10:27:17
415
原创 C/C++内存对齐
从一个例子引出内存对齐:#include<iostream>using namespace std;struct st1{ char a; int b; short c;}s1;struct st2{ short c; char a; int b;}s2;int main(){ cout << "sizeof(s1) is " << sizeof(s1) << endl; cout << "sizeof(s2)
2020-08-14 15:35:51
282
原创 C++ 函数指针
函数指针的基础知识 在C++中运用函数指针首先要完成的工作:获取函数的地址 声明一个函数指针 使用函数指针来调用函数、1. 首先是获取函数的指针 获取函数的地址就是使用函数名即可,不用跟参数,比如think( )是一个函数,那么think就是该函数的地址,而think()则是该函数的返回值。因此要注意区分传递的是函数的地址还是函数的返回值。2. 声明函数指针 声明只想某种数据类型的指针时,必须指定指针指向的类型。同样在声明指向函数的指针时,也必须指定指针指向的...
2020-05-19 09:07:40
553
原创 冒泡排序
冒泡排序:将最大得数据下沉,最小的数字上浮,最后形成一组由小到大有序的数字。void Bubble_Sort(ElementType A[], int N){ for (P=N-1; P>=0; P--){ flag = 0; for (i=0; i<P; i++){ //一趟冒泡 if( A[i] > A[i+1]){...
2020-04-16 10:13:43
120
原创 归并排序
归并排序思想:划分为两个子序列 分别对每个子序列归并排序 有序子序列合并/*两路归并排序算法框架*/template <class Record>void MergeSort(Record Array[], Record TempArray[], int left, int right){ //Array为待排序数组,left,right两端 int middl...
2020-04-10 10:43:48
160
原创 交换排序
1. 冒泡排序算法思想:不停地比较相邻的记录,如果不满足排序要求,就交换相邻记录,直到所有记录都已经排好序检查每次冒泡过程中是否已经发生过交换,如果没有,则表明整个数组已经排好序了,排序结束。/*冒泡排序*/template <class Record>void BubbleSort(Record Array[], int n){ bool NoSwap; ...
2020-04-10 09:42:33
169
原创 选择排序
1. 直接选择排序依次选出剩下的未排序记录中的最小记录/*直接选择排序*/template <class Record>void SelectSort(Record Array[], int n){ //依次选出第i小的记录,即剩余记录中最小的那个 for (int i = 0; i < n - i; i++){ //首先假设记录i就是最小的 int S...
2020-04-09 18:52:57
215
原创 插入排序
插入排序的核心思想可以用打扑克牌时的理牌来表示,当整理牌时,我们将新的牌插入到相应的位置。对于一列数字,对于其中的任意一个数字,在前面的一个已排序子序列当中,找到自己合适的位置,插入进去。/*插入排序算法*/template <class Record>void ImprovedInsertSort(Record Array[], int n){ //Array[]为...
2020-04-09 17:41:13
178
原创 C++ 栈与队列
1. 栈栈是只能从一端访问的线性群体,是一种后进先出的数据结构。栈示意图: 栈的基本状态:栈空 栈满 一般状态栈空:栈中没有元素(以数组容纳的栈为例) 栈满:栈中元素个数到达上限(以数组容纳的栈为例) ...
2020-03-31 21:47:51
360
原创 C++ 输入、输出与IO流(二)
重要的输入流类:istream类最适合用于顺序文本模式输入,cin是其实例 ifstream类支持磁盘文件输入 istringstream构造输入流对象:如果在构造函数中指定一个文件名,在构造该对象时该文件便自动打开ifstream myFile("filename");在调用默认构造函数之后使用open函数来打开文件ifstream myFile;//建立一个文件流对象...
2020-03-31 12:23:59
193
原创 C++ 输入、输出与IO流(一)
1. IO流的概念当程序与外界环境进行信息交换时,存在两个对象,一个是程序中的对象,另一个是文件对象。流对象与文件操作:程序建立一个流对象 指定这个流对象与某个文件对象建立联系 程序操作流对象 流对象通过文件系统对多连接的文件对象产生作用提取与插入:读操作在流数据抽象中被称为(从流中)提取 写操作被称为(向流中)插入2. 输出流概述三种重要的输出流:ostrea...
2020-03-30 21:49:36
374
原创 C++ 泛型程序设计——迭代器
编写不依赖于具体数据类型的程序 将算法从特定的数据节结构中抽象出来,成为通用的 C++的模板为泛型程序设计奠定了关键的基础术语:概念用来界定具备一定功能的数据类型。 对于两个不同的概念A和B,如果概念A所需求得功能也是概念B所需求的功能,那么就说概念B也是概念A的子概念。术语:模型符合一个概念的数据类型称为该概念的模型。用概念做模板参数名:很多STL的实现代码就是使用概念来...
2020-03-29 18:44:58
321
原创 C++ 链表
顺序访问的线性群体——链表类链表是一种动态数据结构,可以用来表示顺序访问的线性群体 链表是由系类节点组成的,节点可以在运行时动态生成 每一个结点包括数据域和指向链表下一个结点的指针(即下一个结点的地址)。如果链表每个结点中只有一个指向后继结点的指针,则该链表称为单链表。单链表: 单链表的结点类模板:template <clas...
2020-03-27 21:55:55
317
原创 C++ 虚函数
先看一个例子:#include<iostream>using namespace std;class Base1{public: virtual void display() const; //虚函数};void Base1::display() const{ cout << "Base1::display()" << endl;}...
2020-03-27 16:17:40
154
原创 C++ 运算符重载
C++中几乎可以重载全部的运算符,而且只能重载C++中已经有的。不能重载的运算符:“. ”、“.*”、“::”、“?.”; 重载之后运算符的优先级和结合性都不会改变; 运算符重载是针对新类型的实际需要,对原有运算符进行适当的改造; 例如:使用复数类的对象可以用“+”运算符实现加法,是时钟类对象可以用“++”运算符实现时间增加1秒。1. 运算符重载为成员函数 1.1 双目运算符重载为...
2020-03-27 12:15:50
4370
原创 C++ 继承与派生(二)
派生类把基类继承以后,怎么样通过派生类完成对基类成员进行初始化呢?一般默认情况下,基类的构造函数不被继承,派生类需要定义自己的构造函数。一般情况下,通过派生类将参数传递给基类的构造函数,完成对基类的初始化,C++11规定,可以使用using语句继承基类构造函数,但是只能初始化从基类继承的成员,语法形式:using B::B。1. 派生类的构造函数1.1若不继承基类的构造函数:派生类...
2020-03-25 21:51:56
203
原创 C++ 继承与派生(一)
1. 继承与派生概述1.1 继承与派生是同一过程从不同的角度看保持已有类的特性而构造新类的过程称为继承 在已有类的基础上新增自己的特性而产生新类的过程称为派生被继承的已有类称为基类(或者父类)派生出的新类称为派生类(或子类)直接参与派生出某类的基类称为直接基类基类的基类甚至更高的基类称为间接基类继承的目的:实现设计与代码的重用派生的目的:当新的问题出现,原有程序无法...
2020-03-25 15:10:45
2497
原创 C++ Vector对象
1. 为什么需要vector?封装任何类型的动态数组,自动创建和删除 数组下标越界检查2. vector对象的定义:vector <元素类型> 数组对象名(数组长度);//例子:vector <int> arr(5) //建立大小为5的int数组3. vector对象的使用对普通元素的引用,与普通数组具有相同的形式:vector 对象名 ...
2020-03-23 12:35:32
230
原创 C++ 类的友元
友元是C++提供的一种破坏数据封装和数据隐藏的机制 通过将一个模块声明为另外一个模块的友元,一个模块能够引用到另一个模块中本是被隐藏的信息 可以声明友元函数和友元类 为了确保数据的完整性,及数据封装与隐藏的原则,一般很少用友元1. 友元函数友元函数是在类声明中由关键字friend修饰说明的非成员函数,在它的函数体中能够通过对象名访问private和protected成员。作用:增...
2020-03-20 21:59:23
236
原创 C++ 枚举类
1. 枚举类定义语法形式enum class 枚举类型名:底层类型{枚举值列表};默认的底层类型是int型,但是新的C++标准中可以自定义底层类型。例:enum class Type {General,Light,Medium,Heavy}; //底层类型默认是int型enum class Type: char{General,Light,Medium,Heavy}; ...
2020-03-19 20:31:16
617
原创 C++ 复制构造函数
1. 复制构造函数定义复制构造函数是一种特殊的构造函数,其形参为本类的对象引用,作用是用一个已存在的对象去初始化同类型的新对象。 class 类名{public:类名(形参); //构造函数类名(const 类名 & 对象名); //复制构造函数//...};类名::类(const 类名 & 对象名) //复制构造函数的实现{函数体} 2. ...
2020-03-19 12:47:07
2654
原创 C++ 函数重载
1. 函数重载C++允许功能相近的函数在相同的作用域内以相同的函数名声明,从而形成重载。/*两个函数声明的形参类型不同*/int add(int x,int y);float add(float x,float y);// 两个函数声明的形参个数不同int add(int x,int y);int add(int x, int y,int z);上面这几个例子的函...
2020-03-19 10:00:22
462
原创 C++ 类模板
C++在定义存储double值或string对象的类时,除了保存的对象类型不同外,这两种类的代码是相同的。然而与其编写新的类声明,不如编写一个泛型的栈,然后将具体的类型作为参数传递给这个类。这样就可以使用通用的代码生成储存不同类型值的栈。 C++的类模板为生成通用的类声明提供了一种跟好的方法,模板提供参数化类型,既能够将类型名作为参数传递给接收方来建立类或函数,例...
2020-03-18 22:32:17
226
原创 C++ 引用类型
1. 引用传递在C++中值传递可以实现单向传递,但是引用传递可以实现双向传递。引用类型引用(&)是标识符的别名 例如:int i, j ; int & ri = i; //定义int引用ri,并初始化为变量i的引用。 定义一个引用时,必须同时对他进行初始化,使它指向一个已存在的对象。 j = 10 ri = j; //相当于...
2020-03-18 18:55:00
622
原创 C++ 函数模板
1. 举例说明问题:整数类型和浮点数类型求绝对值的算法,需要写两种重载函数吗?int abs(int x){ return x < 0? -x:x;}double abs(double x){ return x < 0? -x:x;}解决:创建一个通用功能的函数 支持多种不同参数 简化重载函数的函数体设计template<ty...
2020-03-18 10:17:52
477
原创 C++ 运算符重载
运算符重在是一种形式的C++多态,之前有学过C++是如何能够定义多个名称相同但是参数列表不同的函数的,这被称为函数重载或者函数多态。这种操作被用于不同的数据类型运用同名的函数来完成相同的基本操作。运算符重载将重载的概念扩展到运算符概念上,允许赋予C++运算符多种含义。实际上之前我们已经用过运算符重载,例如,将*运算符用于地址,将得到存储到这个地址中得值,当时将它用于两个数字时,得到...
2020-03-13 17:59:59
276
原创 C++ 运用cin来控制while循环
C++中有时需要用循环输入数字,而将非数字输入设置为一个错误条件,如:while (cin >> x >> y)我们知道,cin时istream类的一个对象,抽取运算符(>>)被设计成使得cin>>x也是一个istream对象,类运算符是使用函数实现的。使用cin>>x时,程序将调用一个函数,该函数返回一个istream值。将抽...
2020-03-10 16:56:22
3125
原创 C++ 函数和数组
来看看一个函数声明:int sum_arr(int arr[], int n) //arr = array name, n = size防护括号指出arr[ ]是一个数组,而方括号为空则表明,可以将任何长度的数组传递给该函数。但是实际情况并非如此:arr实际上并不是数组,而是一个指针!但是在编写函数其余部分时,可以将arr看作是数组。首先来看一个例子:#include<io...
2020-03-10 15:24:08
1301
原创 C++ 模板类vector和模板类array
模板类vector和array是数组的替代品,下面来介绍一下这两种类以及与数组的对比。1. 模板类vector 模板类vector类似于string类,也是一种动态数组,基本上,它是使用new创建动态数组的地带品,实际上,vector类确实使用new和delete来管理内存,但只这种工作是自动完成的。 首先,要使用vector对象,必须包含头文件ve...
2020-03-09 20:54:57
651
原创 C++ 读取字符串
在C++中可以通过cin来读取一个字符串,但是每次读取一个单词并不是最好的选择,例如,假设程序要求读入的城市名,用户输入New York,希望程序读入的是完成的城市名,而不单单是一个单词。C++提供了一次额面向行的类成员函数:getline()和get()。这两个函数都读取一行输入,直到到达换行符。然而,随后getline()将丢弃换行符,而get()将换行符保留在输入序列中。...
2020-03-09 12:08:08
1999
原创 C++ const限定符
符号名称指出了长良表示的内容,另外程序如果在多个地方使用同一个常量,则需要修改该常量,只需要修改一个符号定义即可,C++有一种很好处理符号常量的方法,这种方法就是使用const关键字来修改变量声明和初始化。例如,结社需要一个表示一年中月份数的符号常量,在程序中输入这行代码:const int Month = 12;这样,在程序中便可以使用Month,而不是12了。常量被初始...
2020-03-09 11:08:36
136
原创 Numpy学习
Numpy学习1.1 认识Numpy数组对象Numpy是一个用python实现的科学计算的扩展程序库,包括:一个强大的N维数据对象Array比较成熟的函数库用于整合C/C++和Fortran代码工具包使用的线性代数、傅里叶变换和随机数生成函数。numpy和稀疏矩阵运算包scipy配合使用更加方便。import numpy as np #导入numpy工具包data = np...
2020-01-14 20:52:24
614
原创 机器学习|感知机
运用感知机模型实现对鸢尾花分类运用感知机实现对鸢尾花进行分类import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom matplotlib.colors import ListedColormapplt.rcParams['font.sans-serif'] = ['SimHei'] # 步骤一(...
2019-12-23 15:44:15
239
原创 matplotlib学习
40题matplotlib从入门到精通导入导入matplotlib库简写为pltimport matplotlib.pyplot as pltimport numpy as np基本图表用plot方法画出x=(0,10)间sin的图像x=np.linspace(0,10,100)plt.plot(x,np.sin(x))plt.show()3. 用加点线的方式画出...
2019-12-23 10:00:40
726
原创 python中if __name__ == '__main__'
最近在写python程序时遇到了if name == ‘main’(下划线由于),不清楚到底是什么含义,后来查阅了一些资料才明白了,总结下来供他人参考。首先我们知道一个python文件有两种两种方式,第一个是直接作为脚本执行,第二个是在其他文件的python脚本中被调用执行,因此 if name == 'main’的作用就是控制这两种执行代码的过程,当文件作为脚本直接运行时,if name ==...
2019-12-06 20:59:35
565
原创 机器学习|两个隐藏层的Softmax分类器
Tensorflow实现两个隐藏层的Softmax分类器Softmax分类器介绍之前用Tensorflow实现Logistic回归模型的博客里面讲解了Logistic,最后顺便提了一下Softmax模型,并给出了一个实例。Softmax是用于分类过程,用来实现多分类的,简单来说,它把一些输出的神经元映射到(0-1)之间的实数,并且归一化保证和为1,从而使得多分类的概率之和也刚好为1。不同于Lo...
2019-12-06 14:22:20
1159
settings-hq.zip
2019-11-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人