- 博客(22)
- 收藏
- 关注
转载 任意进制转换—C++实现
#include<iostream>using namespace std;int main(){ long n = 0; //待转换的数字 int x = 0; //进制 int a = 0; //转换后的单位字符 int m = 0; //转换后的位数 int s[100]; //转换后字符串 cin >> n >> x; while (n!=0)...
2020-05-21 21:19:46
443
1
原创 Linux下C++进程间通信机制
linux下进程间通信的几种主要手段简介:管道(Pipe)及有名管道(namedpipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信; 信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身;linux除了支持Unix早期信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigaction(实际上,该函数是基于BS..
2020-05-12 20:23:03
1738
原创 Linux下C++线程间同步机制
线程的最大特点是资源的共享性,linux下提供了多种方式来处理线程同步,最常用的是互斥锁、条件变量和信号量。1)互斥锁(mutex)通过锁机制实现线程间的同步。同一时刻只允许一个线程执行一个关键部分的代码。int pthread_mutex_init(pthread_mutex_t *mutex,const pthread_mutex_attr_t *mutexattr);int pthread_mutex_lock(pthread_mutex *mutex);int pthread_
2020-05-08 19:35:36
556
转载 C++类内存分布
我们来看看编译器是怎么处理类成员内存分布的,特别是在继承、虚函数存在的情况下。我们先用好Visual Studio工具,像下面这样一步一步来:先选择左侧的C/C++->命令行,然后在其他选项这里写上/d1 reportAllClassLayout,它可以看到所有相关类的内存布局,如果写上/d1 reportSingleClassLayoutXXX(XXX为类名),...
2020-04-27 18:01:39
320
转载 Overload(重载)、Override(覆盖)、Overwrite(重写) 三者区别
Overload(重载):在C++程序中,可以将语义、功能相似的几个函数用同一个名字表示,但参数或返回值不同(包括类型、顺序不同),即函数重载。(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual关键字可有可无。Override(覆盖):是指派生类函数覆盖基类函数,特征是:(1)不同的范围(分别位于派生类与基类);(2)函数名字相同;(3)...
2019-09-03 21:07:19
720
原创 C++11新特性
1.引入 nullptr如果 NULL 被定义为 ((void*)0),C++ 不允许直接将 void * 隐式转换到其他类型,那么当编译char *ch = NULL时,无法编译通过,因此NULL一般被定义为 0。而这依然会产生问题,将导致了 C++ 中重载特性会发生混乱,为了解决这个问题,引入nullptr。考虑以下:void foo(char *);void foo(in...
2019-08-08 21:08:22
210
原创 C/C++基础
人生短暂,做点记录吧!1、一个空类占内存1个字节。这是为了保证n个连续空类声明时,变量地址有偏移,防止变量覆盖。2、一个类成员 ,当有虚函数时,就存在一个虚函数表的 "指针"(无虚不存在)。3、C和C++都支持结构体,C++的结构体,可以认为是类的一种变体,二者的差异性。类中成员,如果不声明,默认是private,结构体中成员,如果不声明,则默认是public。4、在C++里...
2019-08-07 11:53:59
117
原创 Android Studio问题记录
初步接触Android Studio,简单记录下遇到的各种问题。问题1:Execution failed for task ':app:transformClassesWithInstantRunForDebug'问题原因: InstantRun错误,具体请参考:https://blog.youkuaiyun.com/guolin_blog/article/det...
2018-12-29 21:14:02
224
原创 C/C++进程内存分布
一、进程的内存分布图: 二、简单说明:代码区(.text):也称文本段(Text Segment),存放着程序的机器码和只读数据(常量),可执行指令就是从这里取得的。如果可能,系统会安排好相同程序的多个运行实体共享这些实例代码。这个段在内存中一般被标记为只读,任何对该区的写操作都会导致段错误(Segmenta...
2018-10-30 22:54:41
1138
原创 二叉树各种遍历方式(递归与非递归)
二叉树简述 1、第i层至多有2的i-1次方个结点;2、深度为k的二叉树至多有2^(k)-1个结点;3、叶子结点个数为n,双结点个数为m,则 n= m+14、递归遍历方式代码简单,效率低;非递归遍历方式代码较复杂,效率高5、层序遍历需要借助(queue)实现,前、中、后序遍历需借助栈(stack)实现。 节点定义 typedef struct N...
2018-09-16 16:59:51
700
原创 STL 二级空间配置器实现机制
一:简述STL 空间配置器(allocator)中分配内存与构造对象分开,在头文件<memory>定义:1、分配内存由alloc::allocate()负责,内存释放由alloc::deallocate()负责,在<stl_alloc.h>定义。2、构造对象由::construct()负责,对象析构由::destroy()负责,在<stl_construc...
2018-08-22 23:00:41
245
原创 C++继承时权限
C++中类的三种访问权限: 公用(public):访问权限最高;派生类,外部函数,对象也可以直接访问(无论是成员变量还是成员函数)。 私有(private):访问权限最低;只能是该类内部函数互相调用,派生类、外部函数,对象都不能访问。 保护(protect):访问权限中间;该类内部函数、派生类都能访问,外部类、外部函数,对象不能访问。继承时,这样更容易记住: C++中类的的继承方式有:p
2016-07-26 16:47:53
1436
原创 计数排序
计数排序 适用场合:数据范围小,数据集中排序思想:使用数组来统计每个数字出现的次数时间复杂度:O(n);稳定性:稳定代码实现:void count_sort(int *array, int length, int min, int max){ int *count = NULL...
2016-04-22 22:25:20
252
原创 归并排序
归并排序排序思想:(分治思想)先将整个集合进行递归拆分,拆到一个数据的时候开始返回,然后进行合并返回;时间复杂度: o(n * (log n / log 2) )稳定性: 稳定//归并排序接口函数void merge_sort(int *array, int len...
2016-04-22 22:10:05
336
原创 快速排序
快速排序排序思想:1.首先选定一个标志值(一般选第一个)value,比其大的放在右边,比其小的放在左边; 2.再分别递归处理value左边和右边的集和; 3.begin与end相等表示结束...
2016-04-22 21:41:06
242
原创 shell排序
shell 排序(减小缩量排序)稳定性:不稳定排序思想:将多个数据集先进行分组,再对每组集和进行插入排序。(gap表示分的组数目,(gap-1)可表示每组数据的间隔)实现代码://从小到大排序void shell_sort(int *array, int length)...
2016-04-21 22:25:28
353
原创 直接选择排序
选择排序时间复杂度:O(n^2),不稳定。思想:初始情况:有序空间为空,无序空间为整个待排空间。过程:每次从无序空间取出一个最小值和无序空间第一个元素进行交换,然后缩小无序区间,直到无序区间只剩一个元素代码:void select_sort(int *arr...
2016-04-21 22:24:26
228
原创 直接插入排序
直接插入排序排序思想:将一个数据集和看作一个无序区间和一个有序区间。每次从无序区间取出第一个值,插入到有序区间的确定位置 直到无序区间为空。注意:初始状态,将待排序区间的第一个元素作为有序空间,剩下的作为无序区间时间复杂度:O(N^2)代码实现:...
2016-04-21 22:17:02
280
原创 优化的冒泡排序法
一、优化的冒泡排序1、思路:如果说在某次比较过程中,没有发现交换的过程,说明当前的序例已经是排好序的。 flag == 1 表示有交换过程 flag == 0 表示已排序完成2、代码实现:void bubble_sort1(int *array, int length){ int j =...
2016-04-21 22:04:47
481
原创 堆排序
堆排序排序思路:(1)创建一个堆;(借助队列,按层创建) (2)交换跟节点和最后一个叶子节点的值,在大堆中排除该叶子节点,再将 剩余的二叉树调整成大根堆; (3)重复步骤2,直至二叉树中只有一个节点//实现代码:...
2016-04-21 21:43:13
241
原创 #define,const ,static 的使用总结
static的使用1、全局变量(初始化和未初始化),静态变量(全局和局部) 都在静态区存放,生命周期大于主函数,进程开始时创建,进程结束时回收2、全局变量和静态变量的作用域问题 1)全局变量的作用于就是全局,跟放置位置无关 2)静态全局变量:把修饰的变量的作用与限制在本文件中, 静态局部变量:只初始化一次,以后直接使用,声明周期贯穿整个进程3)...
2016-03-06 21:12:41
431
原创 sizeof,strlen 使用总结
1.sizeof是一种操作符,对变量或者对象可以不加括号,但是类型,必须加括号;2.指针与数组sizeof()使用: (1) 指针也属于一种变量类型(32位操作系统下是4字节,64位操作系统是8字节): 例1:char *p; int length1=sizeof(p) ; // length1=4 或 length1=8;...
2016-03-05 22:21:36
216
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人