c/c++
文章平均质量分 53
olso
这个作者很懒,什么都没留下…
展开
-
c语言中 定义和声明 的区别
c语言中 定义和声明 的区别关键的区别: 是否分配内存声明:声明(declaration )指定了一个变量的标识符,用来描述变量的类型,是类型还是对象,或者函数等。声明,用于编译器(compiler)识别变量名所引用的实体。定义:定义是对声明的实现或者实例化。连接器(linker)需要它(定义)来引用内存实体。文字说明是不是太繁琐,不形象。那么我们就用程序代原创 2015-03-19 15:10:26 · 495 阅读 · 0 评论 -
c++中, 构造函数和析构函数的执行顺序
c++中, 构造函数和析构函数的执行顺序。在面试和实际编程中,会遇到多重继承的问题。顺序很重要,理解着记。看下例子:#include using namespace std;class Base{public : int x0; Base(int a = 0) { x0 = a; cout<<"in Base原创 2015-03-23 14:20:52 · 626 阅读 · 0 评论 -
c++ 类的对象的大小
c++ 类的大小//从以上的几个例子不难发现类的大小: 0. 空类的对象,对象大小是1。因为这样,才能有唯一的地址空间与之对应。否则空类的对象数组obj[10],中ojb[0] 和 obj[1]公用地址空间了。1.为类的非静态成员数据的类型大小之和.2.有编译器额外加入的成员变量的大小,用来支持语言的某些特性(如:指向虚函数的指针).这里,详细说明一下。(1) 没有原创 2015-04-01 09:15:31 · 502 阅读 · 0 评论 -
排列组合
排列 组合排列字符串的全排列这种是给你一个序列,让你找出他的全排列,每个位置不重复。(交换)例如 abc的全排列有 abc, acb, bac, bca, cab, cba还有一种是每个位置可以重复。(所有可能)例如 abc的全排列 aaa, aab, aac, aba, abb,abc,....类似于 输出求n位的每个数 0 ~ 9999....9(n位),原创 2015-04-13 08:35:41 · 501 阅读 · 0 评论 -
数组操作-1 数组中出现次数超过一半的数字
数组中出现次数超过一半的数字方法1.(1)快排中的 partition()的功能是找到 pivot ,并且将pivot放在排好序的最终位置。(2)所以,如果有次数超过一半的数字,那么对数组排序后,中间的元素一定是那个元素。所以使用partition()的返回值进行判断,如果 pivot pivot > middle, 快排pivot之前的元素。直到 pivot原创 2015-04-13 08:47:22 · 529 阅读 · 0 评论 -
c语言中,指针的故事
关于指针的二三事儿指针就是地址,是C语言的精髓。指针是灵活的,有时候也会是灾难的。学会,掌握指针,从这里做起。这里主要引用了网络上的文章,《C指针详解(经典,非常详细)》,作者未知。在此,感谢网络中无私奉献的大神们,大牛们!!(1)识别看指针,先从标识符看起,按照优先级结合,找出指针的类型,指向类型等。直接和标识符相连的,表示不同的意义。[] ==>原创 2015-03-19 11:10:26 · 612 阅读 · 0 评论 -
C++中局部变量可以和全局变量重名
C++中局部变量可以和全局变量重名最近遇到一道题,全局变量和局部变量重名,如何把全局变量赋值为局部变量?对于重名,显然是局部 覆盖 全局。但是这时使用全局变量到时没有涉及过。对于c++而言,在全局和局部重名时,直接使用变量名是局部变量,用 :: 来使用全局变量。例子:#include using namespace std;int x = 0;原创 2015-04-09 09:55:33 · 1095 阅读 · 0 评论 -
Best Time to Buy and Sell Stock
最近遇到一道题,数组表示当日股价,最多进行2次买卖,而且不能连续买,只能买卖买卖。问能赚到的最大值。知道这是一道类型题,但是我想自己独立解决。不过能力有限,最后还是参考了网络中的大牛解法。这里做一下总结。参考推库, 一个神奇的网站。http://www.tuicool.com/articles/rMJZj2能够感到这是一道动态规划的题,分成2部分,然后求和的最大值,但是原创 2015-04-28 22:22:54 · 404 阅读 · 0 评论 -
c/c++线程--1
c/c++线程进程 process线程 thread进程和线程都是由操作系统所体会的程序运行的基本单元。一个程序至少有一个进程,一个进程至少有一个线程。具体的可以参照网络上的牛人对进程和线程的理解。http://www.cnblogs.com/flashsky/articles/642720.html用户空间看,有区别。每个进程在创建时,除了内核的操原创 2015-05-12 07:57:43 · 624 阅读 · 0 评论 -
c/c++线程--3线程池
c/c++线程--3最近一段时间在看linux下c语言的多线程,其中一个比较重要的应用就是线程池。自己也参照着网上的资料写了一个简单的线程池。这里做以总结。1.解决问题,应用场景我们的应用在任何时候都要准备应对数目巨大的连接请求,同时,这些请求所要完成的任务却又可能非常的简单,即只占用很少的处理时间。总之线程池通常适合下面的几个场合: (1) 单位时间内处理任务频繁而原创 2015-05-25 19:48:33 · 522 阅读 · 0 评论 -
判断链表有环及其扩展问题
判断链表有环及其扩展问题单链表里可能有环,如何判断有环?环大小是多少?能否找到环的第一个节点?(1)判断有环设置两个指针,快慢指针,p1,p2,p2一次走两步,p1一次走一步。如果p2走的过程中到达表尾,则没有环,否则p1,p2回进入环,p2会追上p1。此时有环。扩展12个指针走的步数可以扩展吗?比如p1走2步,p2走3步等等。再后面我来谈论这个原创 2015-04-16 09:09:14 · 486 阅读 · 0 评论 -
c/c++线程--2线程同步
c/c++线程--2线程同步线程同步的方式1.互斥锁2.条件变量3.读写锁异步方式信号同步方式:3种锁都需要创建和销毁。还有属性参数,默认属性的话,这个参数传NULL。互斥锁通信机制二元变量,解决线程间同步问题。同步:先后顺序。以排他方式防止数据结构被并发的修改;控制逻辑:a.访问前申请,如果处于开锁状态,则申请到该锁原创 2015-05-14 19:26:51 · 573 阅读 · 0 评论 -
c++ 中默认参数的函数声明和定义的注意事项
c++ 中默认参数的函数声明和定义的注意事项。(1)函数调用在函数定义之前。必须在声明中指出默认参数,否则编译出错。(形参名给出与不给出都可以)int funcc(int x = 7, int y = 8); //给出形参名//int funcc(int = 7, int = 8); //不给出形参名int main(){ cout<<funcc()<<endl;原创 2015-03-23 14:52:21 · 3225 阅读 · 0 评论 -
C/C++ socket编程(2)
C/C++ socket编程(2)socket阻塞,非阻塞套接字在阻塞和非阻塞两种模式下执行I/O操作。在阻塞模式下,在I/O操作完成前,执行的操作函数一直等候而不会立即返回,该函数所在的线程会阻塞在这里。相反,在非阻塞模式下,套接字函数会立即返回,而不管I/O是否完成,该函数所在的线程会继续运行。/// linux环境下设置非阻塞void setnonblocking(原创 2015-03-30 21:36:58 · 524 阅读 · 0 评论 -
c/c++ 处理字符串时要注意的问题
c/c++ 处理字符串时要注意的问题。最近在写一个文件操作的时候,出现了一点儿问题。虽不是大问题,但是不注意的话会产生错误。写了一个块读取的方法。从inf 流中,最多读取num个字符,保存在buf中,并返回读取字符数。int readFromStream(ifstream &inf, char *buf, int num){ //cout<<"her"<<原创 2015-03-26 08:33:00 · 1798 阅读 · 0 评论 -
c语言关于字符串常量的问题
c语言关于字符串常量的问题。我们先看一个例子:char *ptr = "David";ptr[4] = 'x';printf("%s\n", ptr);// 这里说一下,ptr是指针, 指向一个字符串 常量!!// 所以说// ptr[4] = 'x';// 上面的语句是能通过编译的!// 但是运行的时候会出现问题!!---- segmentatio原创 2015-03-20 19:06:31 · 576 阅读 · 0 评论 -
c语言中的“左值”和“右值”
c语言中的“左值”和“右值”左值左值就是在赋值中可以放在赋值操作符 (=) 左边 的值,当然也可以放在右边,比如: int a = 1; double b = 2.0 a = b; b = a; 这里a和b都是左值,一切变量都是左值,但const变量是例外。 右值而右值则是只可以放在赋值操作符右边的值,比如: int a =原创 2015-03-20 18:58:34 · 1252 阅读 · 0 评论 -
程序占用的内存
一个由C/C++编译的程序占用的内存分为以下几个部分:堆,栈,代码段,数据段,BSS段。1、栈区(stack)— 由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。原创 2015-03-20 20:43:35 · 451 阅读 · 0 评论 -
文件中的#ifndef
文件中的#ifndef 头文件的中的#ifndef,这是一个很关键的东西。比如你有两个C文件,这两个C文件都include了同一个头文件。而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了,大量的声明冲突。 还是把头文件的内容都放在#ifndef和#endif中吧。不管你的头文件会不会被多个文件引用,你都要加上这个。一般格式是这样的: #ifndef #d原创 2015-03-20 18:54:06 · 369 阅读 · 0 评论 -
c语言头文件
c语言头文件每个C++/C程序通常分为两个文件。一个文件用于保存程序的声明(declaration),称为头文件。另一个文件用于保存程序的实现(implementation),称为定义(definition)文件。C++/C程序的头文件以“.h”为后缀,C程序的定义文件以“.c”为后缀,C++程序的定义文件通常以“.cpp”为后缀(也有一些系统以“.cc”或“.原创 2015-03-21 16:29:18 · 929 阅读 · 0 评论 -
C/C++ new与malloc()
C/C++ new与malloc()malloc(),free()是库函数;new,delete是C++的运算符。因此,malloc/free 需要库函数的支持,new/delete不需要,而且可以重载运算符。共同点:可以满足动态分配内存和释放内存。不同点:(1) malloc()返回值是空类型指针 (void *) 。new 返回的是对应类型的指针。原创 2015-03-30 19:55:05 · 446 阅读 · 0 评论 -
C/C++编译的程序占用的内存
一个由C/C++编译的程序占用的内存分为以下几个部分:堆,栈,代码段,数据段,BSS段。1、栈区(stack)— 由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。3、全局区(原创 2015-03-30 21:41:13 · 473 阅读 · 0 评论 -
c语言下,关闭socket的两种方式
c语言关闭socket的两种方式一、shutdown()#includeint shutdown(int sockfd,int how);how的方式有三种分别是SHUT_RD(0):关闭sockfd上的读功能,此选项将不允许sockfd进行读操作。不允许接受。SHUT_WR(1):关闭sockfd的写功能,此选项将不允许sockfd进行写操作。不允原创 2015-03-10 19:29:03 · 9738 阅读 · 0 评论 -
C/C++ socket编程(1)
C/C++ socket编程(1)1.主机名到IP地址的映射。IPv4中使用gethostbyname()函数完成主机名到地址解析,这个函数仅仅支持IPv4,且不允许调用者指定所需地址类型的任何信息,返回的结构只包含了用于存储IPv4地址的空间。例子:bool MY_getHostbyName(char * const hostname){ struct hostent原创 2015-03-30 20:28:48 · 601 阅读 · 0 评论 -
linux 路径分割
linux 路径分割(1) 获得当前工作目录的绝对路径获取当前工作目录是使用函数:getcwd。cwd指的是“current working directory”,这样就好记忆了。函数说明: 函数原型:char* getcwd(char* buffer, int len); 参数:buffer是指将当前工作目录的绝对路径copy到buffer所指的内存空间, len原创 2015-03-30 20:43:02 · 2865 阅读 · 0 评论 -
正态分布,泊松分布,指数分布的c/c++代码
正态分布,泊松分布,指数分布的c/c++代码在做实验的时候,需要产生符合某种分布的随机数。这里总结一下正态分布,泊松分布和指数分布的算法和对应c/c++代码。# 参照算法和代码可以转换成对应的其他编程语言原创 2016-03-09 21:40:03 · 17136 阅读 · 1 评论