自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C#将string转换为byte[]

通过C#中的system.text.encoding获取字符串的编码可以有ASCII,DEFAULT,utf-8以及其他一些方式,对于英文而言这几种所获取的编码是没有太大区别的,而中文则大有不同,其中DEFAULT所采取的是GB2312,可以通过一下方式进行确认,程序运行后会发现bufOfGB和buf是相同的 string str = "中国"; byte[] bufOfGB = System.Text.Encoding.GetEncoding

2022-02-27 17:57:59 12489

原创 sobel算子讲解

Sobel算子是区分X,Y两种运算子的,再通过将Sobel运算子与原图进行卷积运算之后得出两个矩阵所含信息也不相同,对于复杂图形很难看出两者之间的差距,对于简单的图形则可以看出较明显差异,通过运算后得出可以看出X,Y只能检测出各个方向上的信息,所以最后还是需要通过相加得到完整的边缘信息。#include<iostream>#include<opencv2/opencv.hpp>using namespace std;using namespace cv;void

2021-02-25 19:49:24 3798

原创 2021-02-12

windows支持两套编码原则,一种是ANSI,另一种是UNICODE,ANSI编码在对英文进行编码是和ASCII相同是,但是对于其他类型进行编码时则采用的是二字节编码格式,UNICODE则均采用二字节编码格式。而具体采用哪一种编码原则则取决于是否定义了UNICODE这个宏名,如果定义了则采用的是UNICODE,否则采用ANSI.与之对应的,在WINDOWS中也设置有四种不同类型的指针,LPCSTR,LPCTSTR,LPSTR,LPTSTR。其中L代表long,P代表pointer,C代表const,T代

2021-02-12 17:32:38 176

原创 opencv中改变图像中某一颜色通道值

#include<opencv2/opencv.hpp>#include<iostream>#include<vector>using namespace std;using namespace cv;int main(int argc, char**argv){ Mat srcImage = imread("D:/pic/pic_fj.jpeg"); Mat logoImage = imread("D:/pic/pic_fgo.jpeg", CV_L

2021-01-16 14:54:45 1393

原创 opencv通过三种方式访问Mat类型的数据

#include<opencv2/opencv.hpp>#include<iostream>#include<vector>using namespace std;using namespace cv;void colorReduce(Mat&srcImage, Mat&dstImage, int div);int main(int argc, char**argv){ Mat srcImage = imread("D:/pic/pi

2021-01-15 18:52:42 765 1

原创 C++通过opencv实现在窗口画矩形

#include<opencv2/opencv.hpp>#include<iostream>using namespace std;using namespace cv;#define WINDOW_NAME "鼠标程序测试"Mat tempImage;Mat srcImage(600,800,CV_8UC3);bool drawRectangleFlag = false;Rect m_rectangle(-1, -1, 0, 0);RNG rng(1234);

2021-01-15 13:49:09 1135

原创 OPENCV中imshow,imread,waitKey,imwrite函数详细解释

imread用于读取图像的数据Mat src0=imread(“D:/pic/pic.jpeg”,CV_LOAD_UNCHANGED);返回一个含有ALPHA通道,及透明通道Mat src1=imread(“D:/pic/pic.jpeg”,CV_LOAD_IMAGE_GRAYSCALE);将图像转化为灰度图像Mat src2=imread(“D:/pic/pic.jpeg”,CV_LOAD_IMAGE_COLOR);将图像转化为彩色图像Mat src3=imread(“D:/pic/pic.jpe

2021-01-14 11:09:59 951

原创 C++通过Dijkstra法寻找并输出最短路径

#include<iostream>using namespace std;#define maxVertices 30#define maxEdges 900#define maxWeight 32767#define imPossibleValue '#'#define imPossibleWeight '-1'typedef char VertexType;typedef int EdgeType;typedef struct { int numVertices,

2020-12-22 15:24:15 212

原创 C++通过后序遍历序列以及前序遍历序列创建二叉树

#include<iostream>using namespace std;typedef char TElemType;typedef struct node { struct node*lchild=NULL, *rchild=NULL; TElemType data;}TNode;void CreateTreeSub(TNode*&BT, TElemType frontOrder[],int frontStart,int frontEnd ,TElemType I

2020-12-11 11:52:05 288 1

原创 C++树的各种操作

#include<iostream>using namespace std;#define InitSize 20typedef char TElemType;typedef struct node { struct node*lchild=NULL, *rchild=NULL; TElemType data;}TNode;typedef struct { TNode tnode[InitSize]; int curSize = 0, maxSize = InitSize

2020-12-11 10:35:01 433

原创 C++将链表二叉树转化为顺序表二叉树

/*#include<iostream>using namespace std;#define InitSize 20typedef int TElemType;typedef struct node{ struct node* lchild, *rchild; TElemType data;}BinNode;typedef struct { BinNode tnode[InitSize]; int curSize, maxSize;}BinTree;void T

2020-12-10 11:27:50 576

原创 C++根据数组建立二叉树

#include<iostream>using namespace std;#define InitSize 20typedef int TElemType;typedef struct node{ struct node* lchild, *rchild; TElemType data;}BinNode;typedef struct { BinNode tnode[InitSize]; int curSize, maxSize;}BinTree;void Tree

2020-12-10 10:07:10 1394

原创 C++求解八皇后问题

#include<iostream>using namespace std;static int m = 0;void Queue(int ch[], int n){ if (n == 8) { for (int i = 0;i < n;i++) cout << ch[i] << ' '; cout << endl; m++; return; } for (int i = 0;i < 8;i++) {

2020-12-10 09:03:35 194

原创 C++中Huffman树的结构定义和算法实现

#include<iostream>using namespace std;#define leafNumber 20#define totalNumber 39#define maxValue 32767typedef struct { char data; int weight; int parent, lchild, rchild;}HTNode;typedef struct { HTNode elem[totalNumber]; int num, root;

2020-12-09 15:08:44 102

原创 C++非递归创建访问二叉树

#include<iostream>using namespace std;typedef char TElemType;#define maxSize 20typedef struct node { TElemType data; struct node*lchild, *rchild;}BinNode,*BinTree;typedef BinNode* SElemType;void CreateTree(BinNode*&BT, TElemType ch[],

2020-12-06 19:19:39 296

原创 C++二叉树的相关操作

#include<iostream>#define maxSize 20using namespace std;typedef char TElemType;//二叉树的顺序存储表示typedef struct { TElemType data[maxSize]; int n;}SqBTree;//二叉树的二叉链表表示typedef struct node { TElemType data; struct node*lchild, *rchild;}BitNode,

2020-12-05 19:53:21 95

原创 C++KMP字符串匹配

#include<iostream>#define defaultsize 30using namespace std;typedef struct { char*ch; int maxsize; int n;}HString;void HStringInit(HString&S, int n=defaultsize){ if (n < defaultsize) n = defaultsize; S.ch = new char[n]; S.maxs

2020-12-04 14:54:39 150

原创 C++自定义字符串的存储表示

#include<iostream>using namespace std;#define maxSize 256typedef struct { char ch[maxSize + 1]; int len;}SeqString;void CreateSeqString(SeqString&S, char ch[]){ int i = 0; while (i < maxSize&&ch[i] != '\0') { S.ch[i] =

2020-12-03 09:53:51 138

原创 C++返回二维数组

#include<iostream>using namespace std;void Print(int*M, int row, int col){ for (int i = 0;i < row;i++) { for (int j = 0;j < col;j++) { cout << *((M + i*col) + j) << "\t"; } cout << endl; }}int**Max(int*M,

2020-12-02 20:49:20 1626

原创 C++数组的理解

一维数组:可以将数组看成是一个容器a,a[0],a[1],a[2],a[3]看成是容器中的元素,这样就可以理解为什么a和a[0]的地址是相同的,以及为什么&a+1和a+1是不同的了,因为&a所指的整个容器,而a所指的是a[0],也就是容器中的一个元素。二维数组可以理解成一个大容器中含有两个小容器a[0],a[1],而每个小容器中又各自有三个元素。...

2020-12-02 17:49:39 136

原创 C++二维数组传参

//C++中并没有多维数组的概念,实际上是数组的数组//二维数组作为参数传入的三种方法#include<iostream>using namespace std;//需要指明每一行有多少个元素void Print1(int M[][3],int n){ for (int i = 0;i < n;i++) { for (int j = 0;j < 3;j++) cout << M[i][j] << "\t"; cout <

2020-12-02 16:37:20 1053

原创 C++通过正交链表表示稀疏矩阵

#include<iostream>using namespace std;#define ROW 5#define COL 5typedef int DataType;typedef struct node { bool head; int row, col; DataType val; struct node*down, *right;}LinkNode;typedef struct { LinkNode first; int terms,cols,rows;}

2020-12-02 09:30:43 244 1

原创 C++的行链表组表示

#include<iostream>using namespace std;#define ROW 5#define COL 5typedef int DataType;typedef struct node { DataType data; int row, col; struct node*link;}LinkNode;typedef struct { LinkNode*first; int len;}LinkList;void LinkListInit(L

2020-12-01 21:05:31 65

原创 C++稀疏矩阵的链表表示

#include<iostream>#define ROW 5#define COL 5using namespace std;typedef int DataType;typedef struct node { DataType data; int row, col; struct node*link;}LinkNode;typedef struct { LinkNode*first; int len;}LinkList;void LinkListInit(L

2020-12-01 19:57:11 320

原创 C++获取稀疏矩阵以及稀疏矩阵的两种转置方法

#include<iostream>using namespace std;#define maxSize 30#define ROW 5#define COL 5typedef int DataType;typedef struct { int row, col; DataType data;}Triple;typedef struct { int rows, cols, terms=0; Triple elem[maxSize];}SparseMatrix;

2020-12-01 17:27:46 820

原创 C++中vector容器的相关操作

vector基本概念普通数组时静态空间,而vector可以动态扩展,但是vector的动态扩展并不是在存储空间后面添加存储位置,而是寻找新的更大的存储位置,然后将原空间中的所有的数据复制到新的存储位置里。vector中常用的迭代器:begin指向第一个,end指向最后一个的下一个,rbegin指向最后一个,rend指向第一个的前一个,vecotr迭代器比较强悍,不需要连续的访问方式,支持随机访问//vector的构造方式/*vector v;//采用默认构造函数vector(v.begin()

2020-11-25 14:50:56 160

原创 C++中string的使用以及各种处理方式之间的区别

string的处理方式有许多种,其中有许多种处理方式的处理结果是相同的,这之间的区别就在于采取的处理方式不相同就拿+和append方式来说,这两者都是拼接,但是+是通过对于运算符重载实现的,append是通过成员函数实现的#include<iostream>#include<string>using namespace std;//字符串的拼接//可以通过+的方式,要添加的目标可以是常字符串,string,以及字符串指针,也可以通过append的方式进行拼接//但是ap

2020-11-25 09:26:02 180

原创 C++迭代器常用三种遍历方法

#include<iostream>#include<vector>#include<list>#include<deque>#include<iterator>#include<algorithm>using namespace std;/*int main(){ vector<int> V; V.push_back(10); V.push_back(20); V.push_back(30);

2020-11-23 21:42:17 2599

原创 C++中类模板添加友元函数显示错误的解决方法

//类模板中添加友元函数//(1):要添加的友元函数是普通函数,那么可以按照类中的方法即可//(2):如果添加的友元函数中含有SeqLn<T>&I这样的类型变量,那么这样的函数便不是普通函数,这实际上是函数模板//如果调用的是这一类,那么必须要提前声明//template<class T>//void Display(SeqLn<T>&C);//并且在类模板中要加上<T>,说明调用的是函数模板,并且类型变量是类模板中的类型变量,如果

2020-11-23 15:59:16 380

原创 C++纯虚数的使用

#include<iostream>#include<string>using namespace std;const double PI = 3.14;class Shape {public: virtual double area()const = 0;};class Circle :public Shape {public: double area()const { cout << "Shape:" << PI * R*R &l

2020-11-22 14:12:58 1981

原创 C++通过类自行实现string

#include<iostream>#include<string>using namespace std;#define InitSize 20class String{protected: char*str; int len;public: String() {}; String(const char*new_str); String(const String&S); char&operator[](int i); String op

2020-11-21 21:09:28 49

原创 C++用对象实现学生教师系统

#include<iostream>#include<string>using namespace std;class Person {protected: int id; string name;public: void Disp(); Person() {}; Person(int id, string name); void SetName(string name); void SetId(int id);};void Person::SetNa

2020-11-21 20:03:42 388

原创 C++类模板

#define InitSize 10template <class T>class atype {private: T a[InitSize];public: atype(); T&operator[](int i);};template<class T>atype< T>::atype(){ for (int i = 0;i < InitSize;i++) a[i] = i;}template<class T&

2020-11-21 15:22:07 56

原创 C++函数模板

#include<iostream>#include<string>using namespace std;//函数模板所生成的并不是重载函数,因为根据函数模板所生成的模板函数名并不相同//如函数模板Swap生成的模板函数是Swap<int>,Swap<double>template <class T>void Swap(T&x, T&y){ T temp = x; x = y; y = temp;}i

2020-11-21 13:57:22 79

原创 C++函数成员与虚函数调用之间的区别

(1)需要分清楚一点,成员函数和virtual函数的调用方法是不一样的(2)成员函数的调用是通过this将对象的值传递给函数,这里被传输的是对象数据,接收数据的函数是根据对象的类型以及函数名来确定的而virtual则是根据虚函数表来确定的,对象调用函数,如果系统发现是虚函数,那么就会去虚函数表找该函数的存储位置,找到后调用该函数(3)注意这两之间的区别,普通函数是根据对象定义类型来确定的,而虚函数则是根据对象本身的虚函数表来的,在平常情况下没有太大区别,但是一旦涉及到指针,也就是说父指针的话那么就有了较

2020-11-21 09:38:02 195

原创 C++类型转换函数

class Complex {private: double real; double img;public: Complex(int real, int img); operator double();};Complex::Complex(int real, int img){ this->real = real; this->img = img;}Complex::operator double(){ return real;}int main(){

2020-11-20 19:59:39 81

原创 C++实现类与类之间的转换

class teahcer;class student {public: friend class teacher; student(int id, string name, string sex);private: int id; string name; string sex; float score;};student::student(int id, string name, string sex){ this->id = id; this->name =

2020-11-20 19:49:14 675

原创 C++中=号的重载以及=号赋值与赋值构造函数的区别

=重载与使用复制构造一样需要重新为对象分配内存,并且需要注意如果对象没有被提前创建而是采用了MySring L=M;的形式系统还是会采用复制构造而不是=重载;class MyString {private: char*str; int len;public: MyString() {}; MyString(const char*str); void disp(); MyString&operator=(const MyString&S); void SetStr(int

2020-11-20 18:18:02 295

原创 化简分式原理讲解

(1)首先来看这个式子r=m%n,这个式子也可以改写成m=n*x+r,其中x=m/n;(2)这实际上也就是在做一个差分将m差分成n,和r的组合,然后然m=n,让n=r,r=m%n实际上也就是让知道能否用r来表示n,如果r=0那么就是可以,如果r!=0那么就继续操作,直到找到可以的值,这个值必然存在,因为所有的整数值都可以用1来表示,所以至少可以为1,若是在1之前找到了,那么就说明m,n可以用该值来表示也就是说这是最大公约数,所以将nume/n,deno/n也就得到了分式的最简答形式void Franc:

2020-11-20 15:36:23 554

原创 C++中复制构造函数与operator=的使用

(1)Complex类型的函数会通过复制构造函数将return中的对象复制给以一个临时对象(2)注意在本次调用中的式子n=f+m+n;通常来说这个式子会被解释为n=(f+m)+n但是在实际执行的过程中却是先利用复制构造函数将n中的形参构造出来,然后利用复制构造函数将m构造出来后面按照n=(f+m)+n的顺序执行(3)在函数执行的过程中需要注意的是=是不使用复制构造函数的,而是使用的是operator=的重构造函数就是说return M是利用复制构造函数创建了一个临时对象,而外面使用的n=(f+m

2020-11-20 13:54:41 347

空空如也

空空如也

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

TA关注的人

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