C/C++
文章平均质量分 52
bullzerone
每天进步一点点
展开
-
restrict关键字
在学习LINUX C编程的时候,经常看到一些函数的参数里有restric这个词修饰,不知道是什么意思,今天看到了。先看一下下面的两段代码,看看代码段1是否可以优化:int fun(int *x,int *y){*x=0; //指针x指向的内存空间设置为0*y=1;return *x}上述代码段可以优化如下:int funtwo(int *x,int *y){原创 2015-03-26 20:37:11 · 509 阅读 · 0 评论 -
QT5 下udp 编程实例
下面是一个简单的QT5下的udp通信的下例子。服务器不停的利用定时器来向socket发送广播消息,客户端可以接收该消息并显示。首先建立工程UdpServer.pro。建立各控件的布局。udpserver.h:class UdpServer:public QDialog{Q_OBJECTpublic:UdpServer(QWidget *parent=0,Qt::WindowFlags f=0原创 2015-12-05 15:53:56 · 3490 阅读 · 0 评论 -
Qt5 UDP开发
最近在学习qt下socket开发,今天先学习了一下qt下udp socket的开发。参考了qt5的文档。以及一些其他的参考书。UDP是指user datagram protocol ,用户数据报协议,是一种轻量级,不可靠的,面向数据报的,非链接的协议。常用在一下对数据可靠性要求不是很重要的程序中。这个类最常用的方式就是利用bind()函数绑定到某一地址和端口,然后调用 writeDategram()翻译 2015-12-05 12:34:19 · 3338 阅读 · 0 评论 -
Qt简单坐标绘制
今天试着在Qt中画一个简单的坐标系。简单记一下,还有一下问题。 在下面的测试当中,有用到鼠标事件,主要是获取鼠标的坐标位置;用到了QPen,QPainter等。 对于坐标的绘制,首先要明白一点,窗体中的坐标和平时数学中的坐标不是很一样,它以窗体左上角为坐标原点(0,0),然后水平向右为X正向,垂直向下为Y正向。 下图中重新绘制了一个像平时数学中的一个坐标系,把坐标原点显示在左下方,但是没有转换原创 2015-07-08 00:17:10 · 8601 阅读 · 1 评论 -
归并--排序
归并排序采用的是一种分而治之的策略。首先将待排序数组划分为若干有序数组,然后再两两合并为有序的数组,到最后合并为一个有序数组。 归并排序主要看怎么把待排序数组划分为有序数组和怎么将两个有序的数组合并为一个有序数组。 划分好说,我们可以一分为二 的划分数组,直到划分的子数组只有一个元素为止,只有一个元素时,它自然是有序的。 划分和归并我们可以用下面的图简单演示一下: 关于归并我们演示一下{原创 2015-06-14 17:01:59 · 341 阅读 · 0 评论 -
堆排序
今天学了一下堆排序。 堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。 如果根节点的编号为i,那么它的左孩子的编号为2*i+1,右孩子的编号为2*i+2,大根堆的要求是每个节点的值都不大于其父节点的值, 即Root[i].key>=Lchild[2*i+1].key原创 2015-06-12 23:37:26 · 362 阅读 · 0 评论 -
Qt中QStack简单应用
栈就是一种后进先出的数据结构,就是最先进入的数据在栈的最底下,最后才出来,最后进入的数据,在栈的顶端,最先出来。 下面利用栈实现了一个简单十进制到二进制的转换。 比如十进制的 10 转换为 二进制。必须明白数制之间是如何转换的。对于十进制到二进制的转换,是整除取余数,反复直到被转换数为0. d r= d%2 d=d/2 10 0 5 5 1 2 2 0原创 2015-07-10 00:33:14 · 7490 阅读 · 0 评论 -
Qt中子窗体控件向父窗体控件传值
今天学习Qt中控件相互传值的方法。其中参考了一些网上的意见。今天学习了两种方法。其中一种是利用全局变量;另一种是利用了Qt中的信号和槽机制。当学习signals和slot机制的时候,有一些疑问,在介绍利用signals和slot进行值传递的时候,再说。练习是这样子,如下两图所示。 第一幅图是主窗体,在画笔宽度文本框和画笔颜色文本框中可以填入宽度和样色值,决定画笔宽度和颜色,然后选择右边的画椭圆,画原创 2015-07-09 22:49:14 · 5250 阅读 · 0 评论 -
希尔排序
希尔排序也称作缩小增量排序。是对插入排序的一种改进。每次有一个增量d>=1,每次把待排序数组分为以d为间隔的几组数字。然后每次对以d为间隔的部分数组进行插入排序,这样跨度较普通的插入排序大,查找与交换的次数也减少。 然后缩小间隔增量d,继续进行插入排序,直到增量变为1,这就和普通排序一样了,但是,经过前面的增量d>1的排序,大部分数字已经有序了,自然交换的次数就少了,速度也就提高了。对于增量的选择原创 2015-06-05 00:12:08 · 452 阅读 · 0 评论 -
Linux IPC 之消息队列
今天学习了一下Linux中的消息队列。 消息队列可能是Linux IPC中最具有数据交换功能的通信方式。消息队列是一个消息的链表,我们创建一个消息队列,然后把想要发送的消息放入队列,别动进程就可以从消息队列中读取消息。 消息队列链表由系统内核进行维护,它可以通过一个消息的类型来检索指定的数据,它在数据流的概念上扩展了数据传递的概念,可以根据需要读取指定的数据,这是管道和FIFO所不能的。 但是原创 2015-06-04 20:32:38 · 442 阅读 · 0 评论 -
二分法排序(折半插入排序)
有一次看到人家的面试题,什么给定一个整型数组,让用二分法对数组进行排序。一开始直接蒙了,什么叫二分法排序?后来查了一下,就是插入排序前,对前面已经排好序的元素进行折半,以期比普通的插入排序更快速定位到要插入的位置。崩溃!!! 我们用下面的图简单演示一下: 【4】为待插入的关键字,前面的【1,3,5,6,7,8,9】是已经排好序的。开始L=0指向A【0】=1,R=6指向A【6】=9,M=(L+R)原创 2015-06-04 00:06:46 · 756 阅读 · 0 评论 -
插入排序
今天学习了一下插入排序: 插入排序类似我们平时打扑克牌时整理牌。@代表移动后空出来的位置 比如我们先拿到一个10,这时手里只有一张牌,本身就是有序的,所以插入排序应该从第二个元素开始排序 【10】 下次我们拿到了5,这时5是待排序的关键字,我们先和手里已有的牌10,比较,5<10,我们就可以把10向后移动【@,10】,然后把5放在原来10的位置上, 【5,10】 再下次我们拿到了3,我们原创 2015-06-02 22:42:04 · 352 阅读 · 0 评论 -
位操作之求绝对值
今天继续学习了位操作,用位操作实现求一个数的绝对值: 对于一个整数a,如果是个正数就直接返回,但是如果是个负数呢?应该取反再返回,比如-5取反后应该是+5,然后返回。 在计算机中数都是用二进制来表示的,就是一串的0和1组合: 例如5的二进制表示为:0000 0101, -5该如何表示,应该用补码来表示,就是,+5的二进制先按位取反,然后加1,如下: 先按位取反得: 1原创 2015-06-01 23:27:42 · 2079 阅读 · 0 评论 -
位操作
最近看了一下c中位运算的知识,写了几个小的测试程序,有的地方不是很明白 统计一个整数中1的个数:int count_1(int a) 26 { 27 /* 28 int i ,j,k; 29 int sum = 0;//和清零 30 for原创 2015-05-31 23:59:47 · 374 阅读 · 0 评论 -
统计连续子数列的最值
给定一个整型数组,数组中的数组元素可能为正也可能为负值,求出该数组中元素连续相加的最大值。也就是求出和值最大的子数列。 比如给定一个数组 a【8】 = {1,-2,-5,3,8,-7,9,4},这个很显然, 最大的和值为a【3】+a【4】+a【5】+a【6】+a【7】 = 3+8+ -7+9+4=17 的值。 我想了最笨的方法: 就是把每个连续的子序列组合找出来,然后求出和值,然后挑出最大的原创 2015-06-19 00:28:07 · 443 阅读 · 0 评论 -
冒泡排序
今天学习一下冒泡排序。 冒泡排序是学习计算机的时候,比较简单的一个排序算法,它的过程就是依次的两两比较挨着的元素,如果他们的顺序是错误的,就交换他们的位置,直到把最大(或最小)的元素放在最后一个位置。然后继续重复的再次两两比较,把次大的元素放在倒数第二个位置上,到最后,把所有的元素放在正确的位置上,这就会好像气泡依次往上浮一样。下面是一个例子。 初始序列A[5]={【4】,2,0,3,1} 第原创 2015-04-16 20:07:14 · 522 阅读 · 0 评论 -
选择排序
这次学习一下选择排序。 首先先从待排序序列中选择一个最小的放在第一个位置,然后再从余下的序列中选择一个次小的放在第二个位置。然后重复的选择下去,直到所有元素排完。 假设有一个序列a【5】={2,1,0,6,4} 我们可以假设最小的值就在a【0】处,这样我们就从a【1…4】中一次从左到右的与假设的最小值比较,如果比假设的值小,那么最小值得下标就更改,最值也更改,直到找到最小值,然后与a【0】交换原创 2015-04-15 23:00:36 · 362 阅读 · 0 评论 -
折半查找
现在学习一下折半查找算法。折半查找是在一个已经有序的序列中查找某一个关键字的位置或者要查找的关键字在不在该有序的序列 中。该算法的关键是要在其中查找关键字的序列必须是有序的。假设待查找的关键字是key,序列的中间位置的下标是mid。查找的时候先从有序序列的中间位置开始。如果key正好等于mid下标所在的元素的值,则查找到并返回key的下标;如果key大于mid所在下标的元素值,那么就说明k原创 2015-04-12 21:36:41 · 1327 阅读 · 0 评论 -
Qt udp
Detailed DescriptionThe QUdpSocket class provides a UDP socket.UDP (User Datagram Protocol) is a lightweight, unreliable, datagram-oriented, connectionless protocol. It can be used when reliability isn转载 2015-12-05 12:37:49 · 775 阅读 · 0 评论