自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 收藏
  • 关注

原创 WPF---style样式

先通俗讲一下样式:样式主要是用来对控件进行修改,使得控件表现出特定的表现状态。比如,普通的Button按钮,很简陋。通过样式可以使得按钮在创建的时候,就具有一些特别的样子(前景色,边框颜色,高度,宽度等等)。这种情况适合用于在前段需要构建大量控件时,避免了重复工作(而且在前端.xaml文件中没有for循环)。Style最重要的两个元素是Setter和Trigger:Setter类:用来设置控件的静态外观风格。Setter类的Property属性用来指明你想为目标的哪个属性赋值;Setter类的V

2021-03-03 22:58:41 448 1

原创 IP地址字符串和数组相互转换

需求描述:    将字符串“192.168.2.126”,转成Byte类型,存放在字节数组中。数组内容为 192,168,2,126。反之亦然。实现方法:   通过C# 库中的IPAddress类完成。   IPAddress类 对应的命名空间是using System.Net;实现代码: //字符串转成 -> 数组 string iPstr = "192.168.2.126"

2021-02-24 21:38:12 1424

原创 C# 基础--枚举类型

在使用枚举类型时候,什么时候获取的是枚举变量,什么时候获取的是枚举值?也就是如何获取字符描述或者对应的数值。结论:  1.使用 枚举变量.GetHashCode() 方法可以获取枚举值,即数值。  2.对枚举变量直接打印,得到的是字符描述信息。  3.创建枚举变量时候,如果没有用枚举成员赋值对其赋值时,有两种情况:      a.枚举值定义不从0开始,得到的枚举变量的值是0,得到的字符描述也是0;  &nb

2021-02-21 17:35:06 512

原创 C# 创建文件时,在主函数上方自动添加文件说明

所谓的创建文件时候自动添加文件说明,就是将创建人创建的时间,以及对文件进行的操作,作出记录。 效果如下图:实现步骤:1.在桌面上选中VS图标,单价右键,选择“打开文件所在位置”。然后从下图的“IDE”路径寻找文件(IDE之前的路径是VS的安装位置,每个人可能不一样)。2.打开Class.cs文件,将下方代码添加到打开内容的上方。/*------------------------------------------------------------// 文件名:$safeitemroot

2021-02-21 16:29:42 284

原创 C#如何删除字符串中的单空格,并且将剩余内容保存在数组中

C#如何删除字符串中的单空格,并且将剩余内容保存在数组中?适用范围:数字字符串,且数值之间使用单括号间隔。可以用在让用户手动输入一些数值的情况。例如:字符串“1 2 3 4 5”,经过转换后数组中保存的是1,2,3,4,5namespace 验证{ class Program { static void Main(string[] args) { //去除字符串中的空格,并且将字符串中的内容保存到数组中

2021-02-19 20:31:54 540

原创 数组,指针容易忽略的问题

如果你觉得数组,指针方面的知识已经很扎实了,我建议你往下接着看,因为你有可能发现原来这些知识点被自己忽略了…如果你觉得数组,指针方面的知识不太扎实,那就更建议你看一下了,毕竟别人踩得坑,提前察觉也挺好的…以图片为例子:1.strlen的结束标志是 \0,sizeof的大小是静态分配时候数组的大小,因此,不会因为遇到 \0 就停止。2. 首先:数据类型的作用就是对待一块内存空间是怎么看的,...

2019-10-04 20:31:35 283

原创 模拟实现vector容器

//模拟实现vector#include <iostream>#include <assert.h>#include <algorithm>#include <string>using namespace std;namespace mylib{ template<class T> class Vector { ...

2019-10-04 19:49:27 207

原创 实现一个不能被继承的类

题目:用C++设计一个不能被继承的类不能被继承?不能被继承?不能被继承?按照继承的理论知识分析,我们只要把类的构造函数设置为私有的,即可解决问题。因为那样的话,子类就没有办法访问基类的构造函数,从而就阻止了进行子类构造对象的任务实现,也就达到了不可继承的目的。但是,假设那样,这个类我们在其它地方怎么使用呢?那这样子给我们的利用也造成了一定的障碍。如何解决?可以定义静态方法(静态方法可以不用...

2019-10-04 15:02:16 186

原创 设计模式---观察者模式&&工厂模式

观察者模式:含义:观察者模式是一种对象行为模式。它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。在观察者模式中,主体是通知的发布者,它发出通知时并不需要知道谁是它的观察者,可以有任意数目的观察者订阅并接收通知。也就是当被观察者状态变化时,通知所有观察者,这种依赖方式具有双向性,在QQ邮箱中的邮件订阅和RSS订阅,当我们浏览一些博客时,...

2019-10-04 14:30:22 382

原创 设计模式---单例模式

谈到单例模式,首先得了解一下什么是设计模式?设计模式:是一套被反复使用,为多数人知晓,经过分类的,代码设计经验的总结。就是前人采取的通用解决问题的方法,如同《孙子兵法》一样,是一种套路,做事模式。使用设计模式的目的:为了代码的可重用性,让代码更容易被他人理解,保证代码可靠性。设计模式使得代码编写工程化,更加规范化。单例模式:就是指一个类只能创建一个对象。单例模式可以保证系统中该类只有一...

2019-10-04 14:02:43 156

原创 判断两条链表(不带环)是否相交,如果相交,求出交点

//定义链表节点typedef struct ListNode{ int val; ListNode* next; }Node; 判断两个链表(链表不带环)有没有相交? 思路:如果两个链表相交,那么最后一个节点肯定是相同的 因此判断两个链表的最后一个节点是不是相同的就可以了bool IsIntersect(Node* first1, Node* first2){ i...

2019-10-04 12:39:18 175

原创 数据结构二叉树常见面试题

题目:1. 求二叉树中的节点个数2. 求二叉树的深度3. 求二叉树中叶子节点的个数4. 求二叉树第K层的节点个数5. 前序遍历,中序遍历,后序遍历(递归版本,非递归版本)6. 分层遍历二叉树(按层次从上往下,从左往右)7. 将二叉查找树变为有序的双向链表8. 判断两棵二叉树是否结构相同9. 判断二叉树是不是平衡二叉树(AVL树)10. 求二叉树的镜像11. 求二叉树中两个节...

2019-10-03 22:41:02 1012

原创 插入排序&希尔排序

插入排序(直接插入排序)例子: 5 2 1 6 4 7 9 0 8 3思路:类似于扑克牌的整理手牌的过程。 当前元素依次和前面的数比较,如果比前面的数大,就交换这两个数的位置。 如果比前面的数要大或者相等,说明找到了自己的合适位置,插入即可。时间复杂度: O(n^2) n个数需要插入,每次插入需要比较n次空间复杂度: O(1) 稳定性: 稳定。void Inser...

2019-10-02 17:48:47 122

原创 归并排序

归并排序例子: 5 2 1 6 4 7 9 0 8 3思路: 1.采用分治算法:将一个大区间,不断划分成小区间。当区间中只有一个数时, 对于该区间肯定是有序的,当区间中没有数时,区间也是有序的。 2.申请一块额外的空间用来存储排序后的内容。 3.将有序的小区间进行合并,保存到新申请的空间内。步骤: 1.申请空间,申请的空间大小为两个已经排序序列之和 2.设定两个指针,最初位...

2019-10-02 17:41:22 164

原创 快速排序&堆排序

快速排序测试用例: 5 2 1 6 4 7 9 0 8 3思路:采用的分治算法,结合递归。1.选择一个基准值,把数组中比基准值大的数据放到基准值的右边,把比基准值小的元素放到左边。(这时,基准值被放在了正确的位置)2.对基准值左边的数组和右边的数组不但进行步骤1。3.递归的结束条件是小区间内没有数据或者数据只有一个。即 left>right 或者 left == right...

2019-10-02 17:36:01 277

原创 冒泡排序&选择排序

冒泡排序测试例子:5 2 1 6 4 7 9 0 8 3思路:冒泡排序通过从开始位置的元素两两比较后面的元素,找到最大值,放到数组的最后面。每次找到最大值,就将数组大小减1比较的两个数,如果前面的数比后面的数据大,就交换两个数,如果前面的数比较小,就不交换两个数。 (比较的思路容易和选择排序混淆)时间复杂度:平均:O(n^2) 每遍历一次数组,只能确定一个数的正确位置,因此n...

2019-10-02 17:25:51 225

原创 strlen 与sizeof()的区别

本质区别:strlen(char*)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个’\0’,如果你只定义没有给它赋初值,这个结果是不定的,它会从aa首地址一直找下去,直到遇到’\0’停止。sizeof()返回的是变量声明后所占的内存数,不是实际长度,此外sizeof不是函数,仅仅是一个操作符,strlen是函数。  char aa[10];cout<<strlen(a...

2019-09-26 19:22:20 165

原创 C++内存管理

在C++中内存主要分为5个存储区域:栈区:局部变量,函数参数等存储在该区域,栈区由编译器自动分配和释放,内存空间是连续的,但是栈的内存空间有限。堆区:需要程序员手动分配和释放,属于动态分配方式。内存空间几乎没有限制,内存空间不连续,因此会产生内存碎片。操作系统有一个记录空间内存的链表,当收到内存申请时遍历链表,找到第一个空间大于申请空间的堆节点,将该节点分配给程序,并将该节点从链表中删...

2019-09-19 11:53:43 197 1

原创 智能指针

为什么会出现智能指针:智能指针是用来智能的管理指针指向的动态资源的释放。由于C++中没有内存的自动回收机制,因此,每次new出来的空间都需要delete,但是有些情况下,总是无法及时的delete,或者由于异常导致程序提早退出,造成内存泄露,因此为了解决内存泄露的问题,产生了智能指针。智能指针是将对内存的管理交付给对象,因此当对象析构时就能够清理资源,有效的避免内存泄露问题。智能指针的种类:...

2019-09-18 22:55:47 1091

原创 C++模拟实现string

模拟实现C++中的string类:传统版写法:拷贝构造+赋值运算符重载class String{public: //构造函数 String(const char* str = "") { //构造string对象时,如果传递的是nullptr指针,程序非法,此处需要断言 if(str == nullptr) { assert(false); return; ...

2019-09-18 00:30:08 406

原创 static的作用(5点)

C语言中:static修饰函数,改变了标识符(函数)的链接属性,使得函数的外部链接属性变成了内部链接属性,函数的存储类型和作用域不受影响,但是函数只能在当前源文件中使用,不能在其他源文件中使用。static修饰全局变量(代码块之外的变量),也是改变了全局变量的链接属性,由外部链接属性变成内部链接属性,使得该全局变量只能在当前源文件中使用,不能在其他源文件中使用。static 修饰局部变量(...

2019-08-17 16:45:05 298

原创 文件压缩-HuffMan压缩

什么是HuffMan压缩:简单来说就是利用Huffman树生成Huffman编码,对文件重复出现的字符进行记录,以减少出现次数。从而达到压缩文件的目的。什么是HuffMan树?定义: Huffman树,又称最优二叉树,是加权路径长度最短的二叉树。带权路径长度 = 节点的权值 * 当前节点距离根节点的路径长度如何构建HuffMan树?生成HuffMan编码HuffMan树中左子树路...

2019-08-01 15:12:01 1005

原创 Windows下dos中 copy命令的实现

实现的的功能:复制文件功能一:功能分析1.1windows 系统下的 dos命令中 指令 copy 能实现文件的复制。比如: copy log.txt log1.txt 就是将log.txt 文件复制一份,复制后的文件名称为 log1.txt图例:1.2copy命令实现要求:自己创造一个命令,比如:test.exe log.txt test.bak 有三个参数,第一个参...

2019-05-15 11:53:01 10585

原创 LZ77文件压缩

LZ77文件压缩:所有的压缩算法 核心都是减少原文件在内存中的存储大小。无论哪一种压缩算法,都是对原文件中的内容进行了修改比如: 可以将重复的内容用更短的记录方法代替,或者将缩小原文件中字符的实际占用的比特位来减少了没用到的比特位。LZ77采用的压缩原理:就是将原文件中重复的内容用“长度距离对“进行替代,长度距离对是两个内容,即长度length,距离distance。距离表示,接下...

2019-04-01 22:44:33 713

原创 C++继承

继承内容:1.继承的概念与实现2.继承权限&访问限定符3.赋值兼容规则4.继承中的作用域(同名隐藏)5.派生类默认对象6.继承与友元7.继承与static静态成员8.继承体系下的派生类的对象模型1.继承的概念与实现继承:继承是代码实现复用的重要手段,在保持原有类(基类,父类)的基础上进行扩展,增加功能,这样产生的类是派生类。继承的格式:class 派生类 ...

2019-03-24 17:21:27 178

原创 实现只能在堆上创建对象&&实现只能在栈上创建对象

实现只能在堆上实现对象的创建:C++98中的实现方法: 只能在堆上创建对象----就是阻止在栈上创建空间。 实例化对象有两个过程:开辟空间 和 初始化对象----调用函数意味着在栈上开辟空间,所以只要阻止初始化,也就是禁止使用构造函数即可-----构造函数私有化,这样就在类外不能访问构造函数了---但是副作用是即使用new在堆上申请的空间也无法使用构造函数进行初始化了--...

2019-03-16 21:01:41 437

原创 二叉搜索树

二叉搜索树1. 二叉搜索树的概念二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值并且它的左右子树也分别为二叉搜索树图例:2.二叉搜索树的创建,插入,查找,删除2.1 创建 二叉搜索树的创建,等同于二叉树的创建过程,区别是,在插入的...

2019-03-16 20:48:53 199

原创 结构体内存对齐 & 联合体大小计算

一:结构体内存对齐规则1.第一个成员在结构体变量偏移量为0的地址处。2.从第二个成员变量开始,要对齐到对齐数的整数倍 地址处。对齐数 就是 编译器默认的一个对齐数 与 该成员大小中的 较小的那一个。VS编译器默认的对齐数是8(字节), Linux中默认对齐数是43.结构体总大小 是每个成员变量的对齐数 中最大的对齐数的整数倍。4 如果结构体中嵌套了另外一个结构体...

2019-02-22 17:38:42 540

原创 静态通讯录

实现一个通讯录要求:通讯录可以用来存储1000个人的信息, 每个人的信息包括: 姓名、性别、年龄、电话、住址 提供方法: 1. 添加联系人信息 2. 删除指定联系人信息 3. 查找指定联系人信息 4. 修改指定联系人信息 5. 显示所有联系人信息 6. 清空所有联系人 7. 以名字排序所有联系人解题思路: 1.先定义一个结构体A,用来存放联系人...

2018-09-13 22:13:15 365

原创 选择排序及优化

选择排序思想: 在一组数据中,每一次遍历找到最大值(或者最小值),将它与最后一个数据(或者第一个数据)交换位置,每一趟确定一个数据的最终位置。一:代码如下:#define _CRT_SECURE_NO_WARNINGS_ 1// 选择排序,每次选出最大值放在最后的位置#include&lt;stdio.h&gt;void Swap(int *p1, int *p2){ ...

2018-09-09 15:14:06 599

原创 顺序表的相关操作

相关操作包括:顺序表的初始化顺序表的创建 (头插,尾插,中间插入数据)顺序表的删除 (头删,尾删,中间删除数据)查询顺序表数据修改顺序表数据顺序表数据排序顺序表的销毁具体的代码分成三个部分,分别是:1.seqlist.h(用来存放函数的头文件,声明函数) 2.seqlist.c (存放顺序表中用到的具体函数) 3.test.c (用来测试顺序表各种函数运...

2018-09-07 21:15:38 237

原创 模拟实现 strncpy, strncat, strncmp

一:模拟实现strncpy库函数中的strncpy的参数:char *strncpy(char *strDest, const char *strSource, size_t count) strncpy 可以将源字符串内容 拷贝到 目标字符串里,拷贝的元素个数可以自己规定。示例:#include&lt;stdio.h&gt;#include&lt;s...

2018-08-10 14:25:13 262

原创 函数指针的应用(二)模仿qsort的功能实现通用的冒泡排序

仿照库函数qsort(),来实现一个通用的冒泡排序qsort()是快速排序,库函数中的qsort()能对多种类型进行排序。为了使冒泡排序也能对多种类型排序,我们首先需要了解一下qsort()的各项参数:void qsort(void *base, size_t num, size_t width, int(__cdecl *compare)(const void *elem1, con...

2018-08-08 15:59:15 297

原创 函数指针的应用(一)计算器

计算器基本功能:+ , - , * , /下面分别用常规写法 和 函数指针写法完成计算器的模拟实现:1.常规写法int Add(int x, int y){ return x + y;}int Sub(int x, int y){ return x - y;}int Mul(int x, int y){ return x * y;}...

2018-08-07 19:48:33 714

原创 深度解析可变参数列表

可变参数列表解析:可变参数是指,函数部分的参数个数不是固定的,每次根据需求可以传入不同个数的参数。实际上,printf()函数;就是一个典型的可变参数函数,可以打印一个字符串,也可以打印多个字符串。例如:int main(){ printf("%d\n ",2); //有一个参数 printf("...

2018-08-07 15:33:17 281

原创 指针数组,数组指针,函数指针,函数指针数组,函数指针数组的指针

指针数组: 指针数组首先是个数组,其次,数组里面存放的元素是指针类型。指针数组的书写形式:int *arr1[10] //整型指针数组char *arrr2[5] //字符型一维指针数组char *arr3[3][2]//字符型二维指针数组请注意:由于下标引用符 [ ] 的优先级 高于 解引用操作符 所以,arr 先与[] 结合,说明是个数组,在于 结合,说...

2018-08-03 13:24:06 532

原创 数组的运算,不同类型中的 sizeof()和 strlen()的情况

sizeof(数组名) 1.括号内只有数组名,没有其他内容,即不对数组名进行运算 表示整个数组,sizeof(数组名)计算的是整个数组的大小,单位是字节 2. &amp;amp;数组名 &amp;amp;后面直接跟数组名 得到的是数组的地址 除了上面两种情况,数组名表示的都是数组首元素的地址strlen() 1.strlen() 求字符串的长度,遇到 \0 ...

2018-07-28 22:46:44 272

原创 c语言操作符

c语言操作符的分类:算术操作符,移位操作符,位操作符,赋值操作符,单目操作符,关系操作符,逻辑操作符,条件操作符,逗号表达式,下表引用、函数调用和结构成员算术操作符: +    -    *    /(除)    %(取余)1.对于除 / 来说,只要有浮点数执行的就是浮点数除法,只有当两个操作数都为整数时候,才执行整数除法。   / 运算结果取的是商值,不遵循四舍五入的规律,只保留整数部分。如3/...

2018-06-18 11:42:30 291

原创 交换两个整型变量的值

交换两个整型变量的值,有以下三种方法:创建临时变量;求和做差;按位异或。1.创建临时变量:引入一个变量tmp存放其中一个待交换变量a,再对待交换变量赋值即可。#include &lt;stdio.h&gt;int main(){ int a = 10; int b = 20; int tmp = 0; scanf("%d%d", &amp;a, &amp;b); printf("a...

2018-06-06 17:25:43 1216

原创 for 循环的简单应用

                          for 循环的简单应用一:寻找素数   素数是仅能被1和它自身整除的数。例如:“2”能被1和2整除,所以2是素数;“6”除了能被1和6整除之外,还能被2,3整除,所以6不是素数。  素数的求解方法可以采用试除法,即依次用数字除以或者被除,通过运算结果结果来以判断是否满足条件。故只需要将该数与小于它的数字相除就能判断是否为素数,因此用到for循环;...

2018-05-30 17:53:06 1576

WPF Binding 学习笔记

WPF Binding 学习笔记

2023-11-12

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除