编程
Zhoujy1996
这个作者很懒,什么都没留下…
展开
-
指针作为参数的申请内存函数
如果函数的参数是一个指针,不要指望用该指针去申请动态内存。示例程序1:void GetMemory(char *p, int num){ p = (char *)malloc(sizeof(char) * num);}void Test(void){ char *str = NULL; GetMemory(str, 100); // str 仍然为 NUL...原创 2018-07-23 16:41:15 · 509 阅读 · 0 评论 -
QT基本教程
原地址:http://www.devbean.NET/2012/08/qt-study-road-2-catelog/本教程以qt5为主,部分地方会涉及qt4。据说非常适合qt5入门学习,最近正在参考,转载希望更多人看到,也为自己以后找到本资料提供方便。Qt 学习之路 2》目录序Qt 前言Hello, world!信号槽自定义信号槽Qt转载 2018-01-28 18:51:02 · 365 阅读 · 0 评论 -
冒泡排序
冒泡排序算法的运作如下:(从后往前)比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。时间复杂度原创 2018-01-26 13:38:08 · 236 阅读 · 0 评论 -
const在类和对象中的应用
const在类和对象中的应用(1)常量数据成员的应用(2)函数的参数为常量的应用(3)常量函数的应用(4)常量对象的应用1.常量数据成员的应用 如果某个类中数据成员是const,表示这个数据成员不能直接被修改,这就要求const数据成员变量需要初始化,但是在类中,数据成员不允许在类里定义时初始化。 那const成员变量什么时候初始化呢?原创 2018-01-30 18:46:36 · 358 阅读 · 0 评论 -
数据库常见死锁原因及处理
数据库和操作系统一样,是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。加锁是实现数据库并发控制的一个非常重要的技术。在实际应用中经常会遇到的与锁相关的异常情况,当两个事务需要一组有冲突的锁,而不能将事务继续下去的话,就会出现死锁,严重影响应用的正常执行。 在数据库中转载 2017-07-09 22:44:32 · 315 阅读 · 0 评论 -
Linux命令大全完整版
Linux命令大全完整版1. linux系统管理命令..1adduser1chfn(change finger information)1chsh(change shell)1date2exit3finger4free5fwhois5gitps(gnu interactive tools process status)5groupdel(group delete)6grou转载 2017-07-06 19:58:26 · 1100 阅读 · 0 评论 -
C++递推算法求解兔子产仔问题
【题目】【算法描述】【源代码】[cpp] view plain copy print?#include <stdio.h> #include <stdlib.h> int Fibonacci(int n)//兔子产仔算法 { int t1, t2; if (n==1||n==2) { return 1; } else转载 2017-06-15 12:39:29 · 5682 阅读 · 0 评论 -
复杂链表复制
题目复杂链表的复制。一个链表的每个节点,有一个指向next指针指向下一个节点,还有一个random指针指向这个链表中的一个随机节点或者NULL,现在要求实现复制这个链表,返回复制后的新链表。 解法一(暴力求解) 1. 这个复杂链表是以单链表为基础的,可以先复制一个单链表,random 指针在原链表上的位置与新链表是相对应的,建立同步投影指针 shadow,与 cur 在原链表上同步,找新链表上的转载 2017-06-15 12:37:39 · 316 阅读 · 0 评论 -
链表题目汇总
单链表目录1.单链表反转2.找出单链表的倒数第4个元素3.找出单链表的中间元素4.删除无头单链表的一个节点5.两个不交叉的有序链表的合并6.有个二级单链表,其中每个元素都含有一个指向一个单链表的指针。写程序把这个二级链表称一级单链表。7.单链表交换任意两个元素(不包括表头)8.判断单链表是否有环?如何找到环的“起始”点?如何知道环的长度?9.判断两个单链表是否相交10.两个单转载 2017-07-05 19:40:17 · 341 阅读 · 0 评论 -
二叉树之重建
二叉树之重建输入一颗二叉树的先序遍历和中序遍历,输出它的后序遍历。 输入: DBACEGF ABCDEFG BCAD CBAD 输出: ACBFGED CDAB var root = {value: null, left: null, right: null}; function build(root, s1, s2) { if (s1.length ===转载 2017-06-11 21:26:51 · 284 阅读 · 0 评论 -
C++文件操作函数-读写文件
文件读写是基础中的基础,关于此类知识的文章非常多,但还是想根据自己的使用心得去总结这么一些内容。1.文件的打开和关闭打开和关闭fopen()函数FILE *fopen(char *filename, *type);filename:可以包含 路径 和 文件名 两部分。如:“TEST.dat”、“C:\tc\TEST.dat” type: “r”打开文件只读。 “w”创建文字文件只写。 “a”转载 2017-06-10 18:11:08 · 570 阅读 · 0 评论 -
C++boost库之variant使用
Variant库包含一个不同于union的泛型类,用于在存储和操作来自于不同类型的对象。这个库的一个特点是支持类型安全的访问,减少了不同数据类型的类型转换代码的共同问题。通过boost的variant类型,variant类型可以表示任意一种类型和any类型有些相似,但还是有些区别,比如说variant支持的类型需提前定义,而any类型不需要,获取any类型的值需要给出原始类型,然而variant类型转载 2017-06-21 18:56:59 · 1197 阅读 · 0 评论 -
圆圈中最后剩下的数
题目描述:0,1,…,n-1这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字。求出这个圆圈里城下的最后一个数字。举例如下图所示: 书上提供了两种解法,第一种常规地用环形链表模拟圆圈,循环删除返回剩下的最后一个。第二种根据数学分析推导递归公式,计算得数。然鹅。。比较好的第二种方法好像不太懂呢模拟圆圈的思路:用list构造链表,用迭代器扫描,当扫描到链表尾部时,移到头部,实现环形链表转载 2017-06-09 13:05:31 · 340 阅读 · 0 评论 -
数组中的冷知识
可能这是一道经典的编程题?#include <iostream>using namespace std;int main(){ int a[3] = { 1,2,3 }; int *p = (int*)(&a + 1); cout << *(p - 1) << endl; return 0;}123456789123456789输出结果是3。 解释 &a+转载 2017-06-08 19:23:35 · 288 阅读 · 0 评论 -
二叉树的基本知识点
节点的度:树中每个节点具有的非空子树数目,或者称后继节点数目。 树的度:书中所有节点的度的最大值被定义为树的度。 叶子节点:度等于0的节点为叶子节点或者称为终端节点。 分支节点:度大于0的节点为分支节点或者称为非终端节点。 树的深度:树中所有节点的最大层数。在一棵树中,每个节点的子树的根称为子节点,该节点称为父节点。 节点的层数从根开始定义,根节点为第一层,它的子节点为第二层,依次类推。二原创 2017-06-03 22:40:58 · 378 阅读 · 0 评论 -
assert()函数
assert()函数用法总结 assert宏的原型定义在#include <assert.h>void assert( int expression );// assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印//一条出错信息,然后通过调用 abort 来终止程序运行。请看下面的程序清单badptr.c:#include <stdio.转载 2017-06-07 22:05:21 · 292 阅读 · 0 评论 -
排序算法之冒泡排序
题目:给出如下一段序列 {9,7,2,5,1,3},请你从小到大进行排序。还是小白的我一直使用循环遍历进行比较交换,这样的排序算法效率十分低,所以开始学习几个经典的排序算法。首先给出未学习排序算法前一直使用的排序代码(C++实现):void OldSort(vector<int> &v) { for (int i = 0; i < v.size()-1; ++i) ...原创 2018-04-23 22:19:01 · 178 阅读 · 0 评论 -
strcpy 无法在VS2013中使用的解决办法
原因:一般认为是vs准备弃用strcpy的,安全性较低,所以微软提供了strcpy_s来代替 然而,strcpy_s并没有strcpy好用,我们要想继续在VS2013中使用strcpy该怎么办 呢?下面是几种解决方法解决方法: <1>其实在输出错误信息中有解决方法,“To disable deprecation , use _CRT_SECURE_NO_WARNINGS”,...原创 2018-05-03 22:26:58 · 1749 阅读 · 1 评论 -
利用栈实现数制转换
示例代码void Conversion(int m, int n){ stack<int> S; if (m >= 0 && n >= 2 && n <= 16) //判断输入的参数是否合法 { while (m) { S.push(m...原创 2018-06-26 15:27:19 · 3798 阅读 · 0 评论 -
typedef和#define的不同之处
++i 和 i++ 的区别刚学C语言时,老师和我们讲解过 俩者的区别,俩者的区别就是: ++i 是先加1再操作i++ 是先操作在加1在看完一些书籍以后,对其有了进一步的了解: 前置版本是将对象本身作为左值返回,后置版本是将对象原始值的副本作为右值返回区别前置版本的递增运算符避免了不必要的工作,他把值加1后直接返回改变了运算对象;与之相比,后置版本需要将原始值存储下来...原创 2018-05-25 22:25:21 · 211 阅读 · 0 评论 -
gbd调试常用指令
1.对于在应用程序中加入参数进行调试的方法:直接用 gdb app -p1 -p2 这样进行调试是不行的。需要像以下这样使用:#gdb app(gdb) r -p1 -p2或者在运行run命令前使用set args命令:(gdb) set args p1 p2可以用show args 命令来查看2. 加入断点:break <linenumber>break <funcName&g...转载 2018-05-06 22:40:40 · 1209 阅读 · 0 评论 -
vim配置
默认的vi很多功能没有打开,我们可以自己根据需要自定义vi,则需要修改vi的配置文件,全局配置文件在/etc/vimrc中,但是一般只需要修改用户的配置文件就可以来,在用户目录下创建一个.vimrc文件#gedit ~/.vimrc将下面的参数设置拷贝进去,当然不需要全部拷贝,可以挑自己想添加的功能即可set nocompatible " 关闭 vi 兼容模式syntax on " 自动语法高亮...转载 2018-05-06 22:34:39 · 165 阅读 · 0 评论 -
宏定义和内联函数的区别
内联函数是代码被插入到调用者代码处的函数。如同 #define 宏,内联函数通过避免被调用的开销来提高执行效率,尤其是它能够通过调用(“过程化集成”)被编译器优化。 宏定义不检查函数参数,返回值什么的,只是展开,相对来说,内联函数会检查参数类型,所以更安全。 内联函数和宏很类似,而区别在于,宏是由预处理器对宏进行替代,而内联函数是通过编译器控制来实现的。而且内联函数是真正的...原创 2018-05-06 22:28:32 · 340 阅读 · 0 评论 -
extern 关键字
在C语言中,修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”。 *注意extern声明的位置对其作用域也有关系,如果是在main函数中进行声明的,则只能在main函数中调用,在其它函数中不能调用。其实要调用其它文件中的函数和变量,只需把该文件用#include包含进来即可,为啥要用extern?因为用extern会加速程序的编译过程,这样能节省时...原创 2018-05-06 18:21:21 · 169 阅读 · 0 评论 -
二维数组元素变换为逆向存放
题目.编程将一个二维数组元素变换为逆向存放,即按元素在内存中的物理排列位置,第一个元素变成倒数第一个元素,第二个元素变成倒数第二个元素,依此类推。 例如,原始二维数组为,逆向存放后变为。试建立一个类REVARR,完成上述工作。具体要求如下: (1)私有数据成员 int a[M][N]:初始化时存放原始二维数组,最终存放逆向存放后的二维数组。 (2)公有成员函数 REVARR(in...原创 2018-05-18 22:05:30 · 1518 阅读 · 0 评论 -
比较成员函数在类里面和外面实现的区别
比较成员函数在类里面和外面实现的区别: 在类里面实现的也称为内联函数,内联函数在调用函数处用内联函数体的代码来替换,并不是像一般函数,转去执行被调用的函数体,执行完后再返回调用函数,这样会提高运行速度,内联函数和带参数的宏定义代码效率是一样的,但优于宏定义。 而在类外面实现的函数称为外联函数,其调用过程和普通函数相同,执行效率不如内联函数,按时外联函数可以转变为内联函数,只要在函数前面...原创 2018-04-27 22:08:03 · 1480 阅读 · 0 评论 -
排序算法之快速排序
基本思想: 通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序的目的。示例代码://使枢轴到位,并返回其所在位置//此时在它之前的元素均不大于它,在它之后的元素均不小于它int Partition(vector<int> &v, int low, int high){ ...原创 2018-04-27 21:56:30 · 155 阅读 · 0 评论 -
const 关键字
const名叫常量限定符,用来限定特定变量,以通知编译器该变量是不可修改的。习惯性的使用const,可以避免在函数中对某些不应修改的变量造成可能的改动。 const修饰基本数据类型 <1>const修饰一般常量及数组 基本数据类型,修饰符const可以用在类型说明符前,也可以用在类型说明符后,其结果是一样的。在使用这些常量的时候,只要不改变这些常量的值便好。 ...原创 2018-05-05 21:54:37 · 133 阅读 · 0 评论 -
每日一练之图书信息管理实现思路
以前写过一个图书管理系统的小项目,在学习完 STL 后决定使用 STL 来处理数据。思路:(1) 首先对每一条图书的数据存储 首先我们会想到用字符串来保存枢机信息,一开始我也是使用一条字符串保存书籍信息,包含:ID号、书名、借阅日期、价格、作者等信息。这样在后期对图书信息的处理会有一些麻烦。所以想到使用结构体存储每一个属性的信息。 例如:struct BookMessgae{ ...原创 2018-04-26 22:38:49 · 265 阅读 · 0 评论 -
static 关键字
控制变量的存储方式和可见性。 (1)修饰局部变量一般情况下,对于局部变量是存放在栈区的,并且局部变量的生命周期在该语句块执行结束时便结束了。但是如果用static进行修饰的话该变量便存放在静态数据区,其生命周期一直持续到整个程序执行结束。但是在这里要注意的是,虽然用static对局部变量进行修饰过后其生命周期以及存储空间发生了变化,但是其作用域并没有改变,其仍然是一个局部变量,作用域仅...原创 2018-05-04 22:37:07 · 143 阅读 · 0 评论 -
排序算法之插入排序
直接插入排序的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数 增1的有序表需要一个记录的辅助空间时间复杂度为 O(n^2)直接插入排序比冒泡和简单选择排序的性能更好一些。 代码实现:void InsertSort(int* a, int len){ int temp = 0; //设置哨兵 for (int i = 1; i &l...原创 2018-04-26 20:13:31 · 124 阅读 · 0 评论 -
构建自己的C/C++插件开发框架
原文转自https://blog.csdn.net/chgaowei构建自己的C/C++插件开发框架(一)——初步设想最近一直在学习OSGI方面的知识。买了一本《OSGI原理和最佳实践》,可是还没有到。遗憾的是,OSGI目前的几个开源框架只支持Java,对C和C++都不支持的。可惜我们公司目前主要的开发语言还是c和c++,即便是引进OSGI,所得的好处范围有限。而我对松散耦合的模块化开发向往已久。...转载 2018-04-25 22:14:07 · 1266 阅读 · 0 评论 -
排序算法之选择排序
基本思想:每一趟在 n-i+1 个记录中选取关键字最小的记录作为有序序列的第i个记录。 -> 在一个元素v[i]的后面所有元素中找出最小元素与 v[i]比较交换,依次进行此操作直到最后一个元素每次都是进行 n(n-1)/2 次比较时间复杂度为 O(n^2)性能优于冒泡排序 代码实现:void SelectSort(vector<int> &v) //选...原创 2018-04-25 21:55:22 · 144 阅读 · 0 评论 -
链表的创建、插入、删除等操作
#include<stdio.h>#include<stdlib.h>#define T 1#define F -1typedef int Status;typedef int ElementType;struct Node{ ElementType value; struct Node* next;};Status init(struct Node** head);St原创 2017-06-19 11:19:08 · 323 阅读 · 0 评论 -
线程同步与互斥——实现互斥锁
今天我们来分享一下,线程同步与互斥——互斥锁的实现。 多个线程同时访问共享数据时可能会产生冲突,造成程序运行结果不是我们所预期的结果。 不产生冲突的多线程访问情况,代码和截图如下: 产生冲突的多线程访问情况,代码和截图如下: 注:每运行一次,结果都可能会不同。 由于多线程访问共享数据时可能会产生冲突,不能保证线程之间的同步与互斥。所以为了保证多线程访问共享数据时能够转载 2017-06-18 19:53:18 · 590 阅读 · 0 评论 -
文件操作
一:C语言文件读写写文件:FILE *pFile=fopen(“1.txt”,”w”);//参数2:以字节为单位项的大小//参数3:要被写入的项的最大数目fwrite(“http://www.sunxin.org”,1,strlen(“http://www.sunxin.org”),pFile);//移动文件指针到文件头//fseek(pFile,0,SEEK_SET);//再在文件指针转载 2017-06-17 21:00:38 · 361 阅读 · 0 评论 -
gdb的常用指令
gdb的常用指令: l : (list) 展示代码 一般展示十行代码; b : (break point) 设置断点; i : (info) i b 查看断点信息 r : (run) 运行到断点结束,后面接的为即将运行的语句; p : 查看 i 的值 q : 退出; c : 继续运行程序; s : (step)向下运行 可以进入到函数内部; n : (next) 向下运行 但原创 2017-05-07 13:25:15 · 356 阅读 · 0 评论 -
欢迎使用CSDN-markdown编辑器
#include<stdio.h>#include<math.h>main(){ double y; double x,m; for(y = 1;y >= 0;y-= 0.1) { m = asin(y)*10; for(x = 1;x < m;x++) printf(" "); p原创 2017-04-24 22:32:53 · 542 阅读 · 0 评论 -
排序算法入门之冒泡排序
在开发中,对一组数据进行有序地排列是经常需要做的事情,所以掌握几种甚至更多的排序算法是绝对有必要的本文章介绍的是排序算法中较简单的一种算法:冒泡排序题外话:在深入学习更多排序算法后和在实际使用情况中,冒泡排序的使用还是极少的。它适合数据规模很小的时候,而且它的效率也比较低,但是作为入门的排序算法,还是值得学习的先尝试用最简单的想法去实现排序,以此来比较学习冒泡排序问题:设有一数组,其大小为10转载 2017-05-25 11:36:30 · 307 阅读 · 0 评论 -
I am from ShangHai的倒序
题目要求为将 I am from ShangHai 倒序为 ShangHai from am I#include <stdio.h>#include <string.h>void re(char str[], int len);void re2(char str[]);int main(){ char str[50]; scanf("%s",&str); // char st原创 2017-05-14 13:30:50 · 498 阅读 · 0 评论