自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Android工程配置混淆引发的问题

公司之前app下载文件是通过Android自带的第三方库FTPClient,有一个问题就是在文件下载过程中会存在文件泄密的问题,于是公司自己开发了一套加密传输文件的api,api是用c来实现的,Android如果要调用必须通过so文件的方式来加载,公司的同事通过一周的开发终于把so文件发给我,然后就有了以下一系列的问题;首先选用通过jna的方式来加载so文件(当然也可以通过jni方式,不过更麻烦)在开发过程中一直使用debug模式在调试,测试验证之后文件可以正常下载,以为这一个小小的功能在只需要一下

2021-08-13 16:01:58 584

原创 C++实现容器中的map

C++中map是根据红黑树来实现的map的作用:自动建立Key - value的对应。key 和 value可以是任意你需要的类型。 根据key值快速查找记录,查找的复杂度基本是Log(N),如果有1000个记录,最多查找10次,1,000,000个记录,最多查找20次。 快速插入Key - Value 记录。 快速删除记录 根据Key 修改value记录。 遍历所有记录。 ...

2018-08-31 16:01:05 11091 4

原创 C++实现红黑树

一. 红黑树的概念:       红黑树是一棵二叉搜索树,它在每个结点上增加了一个存储位来表示结 点的颜色,可以是red或者black,通过对任何一条从根节点到叶子结点简 单路径上的颜色来约束,红黑树保证最长路径不超过最短路径的两倍,因而 近似平衡,而且在实际应用中发现红黑树性能确实比AVL树性能高。二. 红黑树的性质:1. 每个结点不是红色就是黑色; 2. 树的根节点是黑色的 ;...

2018-08-30 21:35:05 613

原创 C++实现AVL树的左单旋,右单旋,左右双旋,右左双旋

一. AVL树的概念:一棵AVL树或者是空树,或者是具有以下性质的二叉搜索树:  1、它的左右子树都是AVL树 ;2、左子树和右子树高度之差(简称平衡因子)的绝对值不超过1(-1、0、1);二. 平衡化旋转:如果在一棵原本是平衡的二叉搜索树中插入一个新节点,可能造成不平衡,此时必须调整树 的结构,使之平衡化。1. 左单旋实现原理:实现代码://左单旋 voi...

2018-08-28 17:06:03 959 1

原创 C++递归及非递归实现二叉搜索树的创建,插入,查找,删除

一.非递归实现二叉搜索树的插入,查找,删除#include<iostream>using namespace std;template<class T>struct BSTreeNode{ BSTreeNode<T>* _pLeft; BSTreeNode<T>* _pRight; T _data; BSTreeNode(co...

2018-08-27 16:43:08 2577

原创 线索化二叉树,前序中序后序遍历(递归和非递归实现)

#include<iostream>#include<string.h>using namespace std;enum PionerInfo{ LINK,THREAD};template<class T>struct BinTreeNode{ BinTreeNode(const T& data) : _pLeft(NULL)...

2018-08-26 17:15:48 2926

原创 C++ 最小堆的实现及基本操作

一.创建最小堆:template<class T>class Heap{public: Heap() {} Heap(const T* array,size_t size) { v.resize(size); for (size_t i = 0; i < size; ++i){ v[i] = array[i]; } _CreateHeap(...

2018-08-26 17:03:51 4751 1

原创 二叉树的基本操作,以及相关面试题(C++实现)

【面试题】1、创建二叉树#include<iostream>using namespace std;template<class T>struct BinTreeNode{ BinTreeNode(const T& data) : _pLeft(NULL) , _pRight(NULL) , _data(data) {} ...

2018-08-24 17:58:00 939 1

原创 C++队列的实现

List.h文件#include<iostream>using namespace std;template<class T>struct Nodetype{ Nodetype(const T& data = T()) : _pNext(NULL) , _pPre(NULL) , _data(data) {} Nodetype<T&...

2018-08-10 17:58:31 980

原创 C++实现带头节点的双向循环链表模板

#include<iostream>using namespace std;template<class T>struct Nodetype{ Nodetype(const T& data = T()) : _pNext(NULL) , _pPre(NULL) , _data(data) {} Nodetype<T>* _pNex...

2018-08-09 22:41:20 435

原创 C++实现String类

class String{public: String(const char* str = "") { if (NULL == str){ _str = new char[1 + 4]; _str += 4; *_str = '\0'; } else{ _str = new char[strlen(str) + 1 + 4]; _str += 4...

2018-08-09 22:39:31 160

原创 C++实现日期类

#include<iostream>using namespace std;class Date{public: Date(int year=1996,int month=7,int day=30) : _year(year) , _month(month) , _day(day) { if (!((year > 0) && (...

2018-08-09 22:34:46 565

原创 C++实现顺序表模板

#include<iostream>#include<assert.h>#include<string.h>using namespace std;template<class T>class vector{public: vector() : _Data(new T[3]) , _MaxSpace(3) , _Cur...

2018-08-09 22:28:20 336

原创 C++实现顺序表

#include<iostream>#include<string.h>#include<assert.h>using namespace std;typedef int Datatype;class SeqList{public: SeqList() : _Data(new Datatype[3]) , _MaxSpace(5) ...

2018-08-09 22:26:27 128

原创 数据结构中稀疏矩阵相加

实现代码:#ifndef TUP_H_INCLUDED#define TUP_H_INCLUDED#define M 6#define N 7#define MaxSize 100 //矩阵中非零元素最多个数typedef int ElemType;typedef struct{ int r; //行号 int c; ...

2018-04-18 16:09:52 1446

原创 Linux中基础IO

一、open/read/write/close等文件相关系统调用open、read、write、close等系统函数称为无缓冲I/O(Unbuffered I/O)函数,用户程序在读写文件时既可以调用C标准I/O库函数,也可以直接调用底层的Unbuffered I/O函数.那么在讨论Linux环境下基础IO函数前,我们先看看之间接触过的C标准I/O库函数C标准I/O库函数hello.c写文件:in...

2018-04-16 20:38:22 190

原创 Linux中信号的使用

什么是信号信号是硬件终端的软件模拟,用来表示程序运行中发生的各种事件。如何主动的发送信号使用kill命令使用kill函数使用alarm()向调用进程发送SIGALRM信号如何捕获信号一般的捕获信号的步骤是:创建一个信号集合向信号集合中添加想要捕获的信号向内核登记信号处理器等候捕捉信号SIGHUP信号     UNIX中进程组织结构为 session (会话)包含一个前台进程组及一个或多个后台进程组...

2018-04-11 21:20:49 229

原创 Linux下实现pipe

管道:管道是Unix中最古老的进程间通信的形式;我们把从一个进程连接到另一个进程的一个数据流称为一个“管道”;匿名管道:#include<unistd.h>功能:创建一个无名管道原型:int pipe(int fd[2]);参数:fd:文件描述符数组,fd[0]表示读端,fd[1]表示写端返回值:成功返回0,失败返回错误代码;代码:#include<stdio.h...

2018-04-10 20:09:35 835

原创 进程

一. 进程的基本概念:1. 程序的一个执行实例,正在执行的程序;2. 担当分配系统资源的实体;二.进程创建,等待和终止:1.进程的创建:fork函数:在Linux中fork函数是非常重要的,他从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。fork函数原型:#include<unistd,h>pid_t fork(void);返回值:子进程中返回0,父进程返回子进程...

2018-04-09 20:30:27 145

原创 数据结构中二叉搜索树

一.  二叉搜索树的概念:二叉搜索树又称二叉排序树,二叉排序树有如下性质:1.若他的左子树不为空,那么他的节点数小于他的根节点数;2.若他的右子数不为空,那么他的节点数大于他的根节点数;3.他的左右子数也分别为二叉搜索树;二.  二叉搜索树的基本操作:1.搜索:若根节点不为空   如果根节点key==查找key,返回true;  如果根节点key > 查找key,在其左子树查找;   如果根...

2018-03-15 16:30:08 174

原创 C++数据结构中算法的使用

一.时间复杂度:时间复杂度其实就是一个函数进行运算时执行的基本操作的次数;运算分类的分析:1.最坏的情况:任意输入规模的最大次数;2.平均情况:任意输入规模等与平均次数;3.最好的情况:任意输入规模的最少次数;当然在实际情况下我们通常考量的最大运行次数,也就是任意输入规模,算法运行的最长时间,例如:1.一个程序运行的最坏情况便是运行时间最长时间,同样也是一个程序的算法的上界;2.对于有些算法,最坏...

2018-02-24 14:30:59 174

原创 C++中构造函数和析构函数

一.构造函数构造函数是一种特殊的成员函数,必须声明为公有的成员,其作用是为类的对象分配内存空间,进行数据成员的初始化。构造函数的性质:1.构造函数的名称必须与类的名称相同;2.构造函数没有返回值,且不能为其定义函数返回值类型;3.构造函数的参数类型可以是任意的类型,可以带有默认形参值;4.构造函数是类的成员函数,可以访问类中的所有成员,可以重载函数,可以为内联函数;5.对象创建是,系统会自动调用构...

2018-02-24 12:21:01 520

原创 Linux环境下实现僵尸进程和孤儿进程

一.模拟实现僵尸进程:1.僵尸进程是如何产生的?僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。父进程调用fork创建子进程后,子进程运行直至其终止,它立即从内存中移除,但进程描述符仍然保留在内存中(进程描述符占有极少的内存空间)。子进程的状态变成EXIT_ZO...

2018-02-08 15:06:51 212

原创 C++中智能指针解析

一. 智能指针简介由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete。程序员忘记 delete,流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 delete 的情况并不罕见。智能指针是存储指向动态分配(堆)对象指针的类,用于生存期控制,能够确保自动正确的销毁动态分配的对象,防止内存泄露。用智能指针便可以有效缓解这类问题。boost库中

2017-12-06 16:57:17 184

原创 C++中STL六大组件简介

一. STL简介1、STL(Standard Template Library),即标准模板库,是一个高效的C++程序库。2、包含了诸多在计算机科学领域里常用的基本数据结构和基本算法。为广大C++程序员们提供了一个可扩展的应用框架,高度体现了软件的可复用性。3、从逻辑层次来看,在STL中体现了泛型化程序设计的思想在这种思想里,大部分基本算法被抽象,被泛化,独立于与之对应的数据结构,用于以相同或相近的

2017-12-02 15:43:39 328

原创 在Linux下实现进度条程序

一.实现原理进度条即计算机在处理任务时,实时的,以图片形式显示处理任务的速度,完成度,剩余未完成任务量的大小,和可能需要处理时间,一般以长方形条状显示。产生进度条的元素:1.一个不断向右增长的容器,可以直观看出当前的进度。 “%md”,预宽为m,右对齐,”%-md”,左对齐2.一个反应进度的百分比,在这里用到转义字符”%%”或者”\%”,都代表的是”%”,”\”代表’\’.3.一个标志,反应该进度是

2017-12-02 15:03:08 296

原创 linux环境下的Vim

一.Vim编辑器是什么?Vim 是 Linux 系统上的最著名的文本/代码编辑器,也是早年的 Vi 编辑器的加强版,而 gVim 则是其 Windows 版。它的最大特色是完全使用键盘命令进行编辑,脱离了鼠标操作虽然使得入门变得困难,但上手之后键盘流的各种巧妙组合操作却能带来极为大幅的效率提升。因此 Vim 和现代的编辑器有着非常巨大的差异,而且入门学习曲线陡峭,需要记住很多按键组合和命令,如今被看

2017-12-02 14:43:11 131

原创 gdb的用法及常用指令

一.gdb调试器程序开发过程中免不了会有一些错误出现,那么就需要对程序进行调试了,在windows中vs直接集成了各种调试工具。在linux中我们需要安装一个额外的调试器,gdb调试器(GNU debugger)是linux下一个c/c++的强大的调试器。其主要功能:设置断点单步执行查看变量动态改变环境输入gdb -v可以查看系统中gdb版本,没有则说明未安装gdb。若是系统没有安装gdb

2017-12-02 14:12:25 478

原创 C++中多态总结

一. 多态的概念同一事物,在不同场景下的多种形态例如:“*”在不同场景下的形态 int* p=&a;//指针 *p;//解引用 a*b;//乘号二.多态的分类1.静态多态:编译器在编译期间完成的,编译器根据函数实参的类型(可能会进行隐式类型转换),可推断出要调用那个函数,如果有对应的函数就调用该函数,否则出现编译错误。int Add(int a,int b){ return a+b;}

2017-11-25 13:57:26 196

原创 C++中继承的总结

一. 继承的概念继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。这样产生新的类,称为派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。通过继承机制,可以利用已有的数据类型来定义新的数据类型。所定义的新的数据类型不仅拥有新定义的成员,而且还同时拥有旧的成员。我们称已存在的用来派生新类的类为基类,又称为父类。由已存

2017-11-14 21:45:13 816

原创 this指针

一. this指针是什么?this是指向实例化对象本身时候的一个指针,里面存储的是对象本身的地址,通过该地址可以访问内部的成员函数和成员变量。this指针的作用域在类的内部,自己声明一个类的时候,还不知道实例化对象的名字,所以用this来使用对象变量的自身。在非静态成员函数中,编译器在编译的时候加上this作为隐含形参,通过this来访问各个成员。二.this指针的属性(1)名称属性:标识符this

2017-11-05 13:37:52 266

原创 C++中引用与指针的区别

一. 引用与指针的相同点1.都是指向一个变量的内存地址,底层实现都相同。 int x = 6;00BE13D8 mov dword ptr [x],6 int *y = &x;00BE13DF lea eax,[x] 00BE13E2 mov dword ptr [y],eax int x = 6;00FE13D

2017-11-05 11:03:14 158

原创 C++的发展

C++的发展语言的发展是一个逐步递进的过程,C++就是一门基于C语言发展起来的语言。最初导致C++诞生的原因是在Bjarne博士等人试图去分析UNIX的内核的时候,这项工作开始于1979年4月,当时由于没有合适的工具能够有效的分析由于内核分布而造成的网络流量,以及怎样将内核模块化。同年10月,Bjarne博士完成了一个可以运行的预处理程序,称之为Cpre,它为C加上了类似Simula的类机制。在这个

2017-10-22 12:25:52 235

原创 C语言-可变参数列表的解析

C语言中的可变参数的实现是将函数实现为可变参数的形式,可以使得函数可以接受1个以上任意多个参数重点内容例子:实现一个函数可以求任意个参数的平均值#include<stdio.h>#include<stdarg.h>int average(int n,...){    va_listarg;    int i = 0;    int sum = 0;    va_start(arg,n)

2017-08-07 22:11:32 218

原创 自我介绍

我是西安工程大学软件工程专业的学生,马上就要步入大三生活了,通过在校的两年时间里我学习了,C语言,java等编程语言。对软件开发怀有浓烈的兴趣,并且不断学习新技术来继续丰富自已的知识。  在学校的这两年我也学到了一些编程知识,但这点知识是满足不了那些就业公司的需求。要想毕业找到好工作就必须学到更多的知识,在同学的推介下我来到比特科技编程语言培训机构。我本身的编程能力很差,希望能在比特老师的帮助

2017-07-15 20:45:12 262

空空如也

空空如也

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

TA关注的人

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