上一页 1 2 3 4 5 6 7 8 9 10 ··· 17 下一页

2013年1月31日

区分“常量指针”和“指针常量”

摘要: 指向const常量的指针(常量指针):关键字 const出现在*号左边,表示指针所指向的地址的内容是不可修改的,但是指针自身可变,也就是指针本身可以修改以指向其他内容。如:const int * p1 = &i;int const * p2 = &i;const指针(指针常量):关键字const出现在*号右边,表示指针自身不可变,但其指向的地址的内容是可以修改的。如:int * const p3 = &i;指向const常量的const指针:指针自身不可修改,指针所指向的内容也不可以修改。如:const int * const p4 = &i;int const 阅读全文

posted @ 2013-01-31 14:50 zhuyf87 阅读(206) 评论(0) 推荐(0) 编辑

c++ 指针与引用的区别

摘要: 指针与引用看上去完全不同(指针用操作符“*”和“->”,引用使用操作符“.”),但是它们似乎有相同的功能。指针与引用都是让你间接引用其他对象。你如何决定在什么时候使用指针,在什么时候使用引用呢?首先,要认识到在任何情况下都不能使用指向空值的引用。一个引用必须总是指向某些对象。因此如果你使用一个变量并让它指向一个对象,但是该变量在某些时候也可能不指向任何对象,这时你应该把变量声明为指针,因为这样你可以赋空值给该变量。相反,如果变量肯定指向一个对象,例如你的设计不允许变量为空,这时你就可以把变量声明为引用。“但是,请等一下”,你怀疑地问,“这样的代码会产生什么样的后果?”char *pc = 阅读全文

posted @ 2013-01-31 12:26 zhuyf87 阅读(213) 评论(0) 推荐(0) 编辑

2013年1月30日

c++ const 引用

摘要: const引用是指向const对象的引用。const int i = 10;const int &ref = i;可以读取ref,但不能修改。这样做是有意义的,因为i本身就不可修改,当然也不能通过ref来修改了。所以也就有将const变量赋值给非const引用是非法的。int &ref1 = i; // error: nonconst reference to a const object非const引用是指向非const类型变量的引用。const引用可以初始化为不同类型的对象或者右值(如字面值常量),但非const引用不可以。// legal for const refere 阅读全文

posted @ 2013-01-30 21:30 zhuyf87 阅读(1201) 评论(0) 推荐(0) 编辑

尾递归(Tail recursion / Tail call)

摘要: 递归与尾递归关于递归操作,简单地说,一个函数直接或间接地调用自身,是为直接或间接递归。例如,可以使用递归来计算一个单向链表的长度:public static int GetLengthRecursively(Node head){ if (head == null) return 0; return GetLengthRecursively(head.Next) + 1;}在调用时,GetLengthRecursively方法会不断调用自身,直至满足递归出口。对递归有些了解的朋友一定猜得到,如果单向链表十分长,那么上面这个方法就可能会遇到栈溢出,也就是抛出StackOverflow... 阅读全文

posted @ 2013-01-30 17:04 zhuyf87 阅读(3342) 评论(1) 推荐(0) 编辑

快速排序

摘要: 快速排序算法被列为20世纪十大算法之一,由Tony Hoare设计。在c++的STL、Java SDK和.net framework中都有各自的实现版本,可见其应用非常广泛。基本思想通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序的目的。所以快速排序的基本步骤如下:1. 从数列中挑出一个元素,称为 "基准"(pivot)。2. 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分割结束之后,该基准就处于数列的中间 阅读全文

posted @ 2013-01-30 11:29 zhuyf87 阅读(435) 评论(0) 推荐(0) 编辑

白话算法 快速排序

摘要: 原文地址:http://blog.csdn.net/morewindows/article/details/6684558快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个,还有大大小小的程序方面的考试如软考,考研中也常常出现快速排序的身影。总的说来,要直接默写出快速排序还是有一定难度的,因此本人就自己的理解对快速排序作了下白话解释,希望对大家理解有帮助,达到快速排序,快速搞定。快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。 阅读全文

posted @ 2013-01-30 10:09 zhuyf87 阅读(265) 评论(0) 推荐(0) 编辑

2013年1月29日

有关c++ 变量的一些关键概念

摘要: c++是静态类型语言,在编译时会做类型检查,变量的类型决定了它的使用方式。静态类型检查有助于更早的发现程序错误。左值和右值:左值可以出现在赋值语句的左边或右边;右值只能出现在赋值语句的右边。变量是左值,字面值常量是右值。变量名以字母或下划线开头,由字母、数字、下划线组成,并且区分大小写。变量的声明和定义:定义用于为变量分配存储空间,可以指定初始值。声明仅用于表明变量的类型和名字。声明需要在类型前加extern关键字。int i; // 定义extern int i; // 声明extern double pi = 3.14; // 定义(声明不允许初始化,如果声明带初值,则被当做定义)变量的初 阅读全文

posted @ 2013-01-29 17:02 zhuyf87 阅读(268) 评论(0) 推荐(0) 编辑

Winsock 套接字I/O模型 之 select 模型

摘要: “select模型”是利用select函数来管理I/O。select函数可用于判断套接字上是否存在数据,或者能否向一个套接字写入数据。比如可以先调用select函数判断能否从某个套接字读数据,以避免直接调用recv进入阻塞状态(或者在非阻塞模式时产生WSAEWOULDBLOCK错误)。int select( __in int nfds, __in_out fd_set* readfds, __in_out fd_set* writefds, __in_out fd_set* exceptfds, __in const struct timeval*... 阅读全文

posted @ 2013-01-29 14:11 zhuyf87 阅读(526) 评论(0) 推荐(0) 编辑

2013年1月28日

TCP长连接与短连接的区别

摘要: 原文地址:http://www.cnblogs.com/beifei/archive/2011/06/26/2090611.html1. TCP连接当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次握手的,而释放则需要4次握手,所以说每个连接的建立都是需要资源消耗和时间消耗的经典的三次握手示意图:经典的四次握手关闭图:2. TCP短连接我们模拟一下TCP短连接的情况,client向server发起连接请求,server接到请求,然后双方建立连接。client向se 阅读全文

posted @ 2013-01-28 17:50 zhuyf87 阅读(230) 评论(0) 推荐(1) 编辑

长连接API小心“窜包”问题

摘要: 原文地址:http://pananq.com/index.php/2011/07/31/有时候,我们以API的方式为客户提供服务,如果此时你提供的API采用TCP长连接,而且还使用了TCP接收超时机制(API一般都会提供设置超时的接口,例如通过setsockopt设置SO_RCVTIMEO),那你可能需要小心下面这种情况(这里姑且称之为“窜包”,应用程序没有将应答包与请求包正确对应起来):如果某一笔以TCP接收超时(例如设置为3秒)返回客户,此时客户继续使用该链接发送第二个请求,此时后者就有可能收到前一笔请求的应答(前一笔的应答在3秒后才到达),倘若错误的将此应答当做后者的应答处理,那就可能会 阅读全文

posted @ 2013-01-28 17:41 zhuyf87 阅读(1139) 评论(0) 推荐(0) 编辑

上一页 1 2 3 4 5 6 7 8 9 10 ··· 17 下一页

导航