
C/C++
文章平均质量分 54
Kunikda
这个作者很懒,什么都没留下…
展开
-
进制转换的一种思路两种实现方法
关于进制转换的问题都老掉牙了,方法有很多,但思路大都一样:将每次除以8后的余数余数倒序输出(这里以10转8为例)。因而进制转换就变味倒序输出的问题,倒序的方法有很多,比如直接用数组存储余数,然后数组要倒序输出就很简单了,本文就不赘述了。本文重点讲后两种方法:1.递归输出;2.使用栈结构存和取,结果很自然为逆序。方法一、递归#include#includevoid f(原创 2011-11-15 21:28:09 · 1025 阅读 · 0 评论 -
getopt()用法详解
getopt被用来解析命令行选项参数。就不用自己写东东处理argv了。#include extern char *optarg; //选项的参数指针 extern int optind, //下一次调用getopt的时,从optind存储的位置处重新开始检查选项。 extern int opterr, //当opterr=0时,getopt原创 2013-05-13 21:50:46 · 23404 阅读 · 0 评论 -
getopt()
getopt被用来解析命令行选项参数。#include extern char *optarg; //选项的参数指针 extern int optind, //下一次调用getopt的时,从optind存储的位置处重新开始检查选项。 extern int opterr, //当opterr=0时,getopt不向stderr输出原创 2013-05-13 20:41:55 · 13484 阅读 · 0 评论 -
C++关键字static的用法
1、cpp文件中的全局静态变量全局内的声明:static int a=0;这样的静态全局变量就只能被该cpp文件所用,不能被其他cpp文件共享。若不声明static:int a=0;这样的全部变量既不能保证a能被其他cpp文件共享,又不能保证不能被其他cpp文件共享。不建议这样使用,最好加extern:extern int a=0;2、静态局部变量int原创 2012-09-05 14:21:59 · 806 阅读 · 0 评论 -
有了malloc/free为什么还要new/delete?
malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。 对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于m转载 2012-09-05 21:39:15 · 837 阅读 · 0 评论 -
strcpy函数与memcpy函数的区别及其函数实现
先看函数实现:显然两函数的原型都不一样:void *memcpy(void * ,const void * ,size_t )与char *strcpy(char * ,const char * );void *memcpy(void *dst,const void *src,size_t count){ if(dst==NULL || src==NULL) return NU原创 2012-09-03 16:24:53 · 1181 阅读 · 0 评论 -
排序(之堆排序)
堆排序是不稳定的排序,平均情况和最坏情况的算法复杂度为O(NlgN),空间复杂度为:O(1)#include#includevoid swap(int &a,int &b){ int tmp; tmp=a; a=b; b=tmp;}void HeapAjust(int a[],int i,int n){ int rc=i; int rs=a[rc]; fo原创 2012-08-30 14:19:23 · 1235 阅读 · 2 评论 -
排序(之插入排序)
插入排序是稳定的排序,平均情况和最坏情况的算法复杂度为O(n^2),最好情况为O(n);空间复杂度为:O(1)。#includevoid InsertSort(int a[],int n){ int i,j,rc; for(i=1;i<n;i++) { if(a[i-1]>a[i]) { rc=a[i]; j=i; while(j-1>=0 && rc<原创 2012-08-30 17:04:09 · 942 阅读 · 0 评论 -
排序(之选择排序)
选择排序是不稳定排序,平均算法复杂度和最坏算法复杂度为:O(n^2);空间复杂度为O(1);稳定性说明:举个例子,序列5 8 5 2 9, 我们知道第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏了,所以选择排序不是一个稳定的排序算法#includevoid select_sort(int a[],int n){ int i,j,pos,tmp原创 2012-08-30 20:11:05 · 843 阅读 · 0 评论 -
排序(之希尔排序)
希尔排序是不稳定排序,平均算法复杂度和最坏算法复杂度为:O(nlgn),最好的情况为O(n);空间复杂度为O(1);希尔排序是插入排序的一种,且希尔排序的算法复杂度大大低于插入排序,只是由稳定变为不稳定的排序。#includevoid Shell_Insert(int a[],int d,int n){ int i,j,rc; for(i=d;i<n;i++) { i原创 2012-08-30 17:07:15 · 751 阅读 · 0 评论 -
排序(之快速排序)
快速排序是不稳定的排序,但是算法复杂度低,平均算法复杂度为:O(nlgn),最差为O(n^2)。空间复杂度为:O(lgn)#includeint PARTITION(int a[],int i,int j){ int key=a[i]; //记录关键字 while(i<j) { while(i<j && key<=a[j]) //向右扫描 j--; /原创 2012-08-29 21:59:34 · 854 阅读 · 0 评论 -
在二元树中找出和为某一值的所有路径(树)
在二元树中找出和为某一值的所有路径(树)题目:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。例如 输入整数22和如下二元树 10 / \ 5 12 / \ 4 7 则打印出两条路径:10, 12和10, 5, 7#include#原创 2012-08-19 21:54:30 · 771 阅读 · 0 评论 -
链表和数组的区别在哪里?
我一直有这样的困惑:链表和数字的区别在哪里?数组是线性结构,可以直接索引,即要去第i个元素,a[i]即可。链表也是线性结构,要取第i个元素,只需用指针往后遍历i次就可。貌似链表比数组还要麻烦些,而且效率低些。想到这些相同处中的一些细微的不同处,于是他们的真正不同处渐渐显现了:链表的效率为何比数组低些?先从两者的初始化开始。数组无需初始化,因为数组的元素在内存的栈区,系统自动申请空间。而链表的结原创 2012-06-12 21:41:50 · 20528 阅读 · 4 评论 -
strlen与sizeof的区别
strlen()计算的是字符串的字符数,且不会计算字符串结束符‘\0’,如n=strlen(“abcde”),此处n=5;sizeof()计算的是变量所占字节数,在计算字符串时,会把字符串结束符‘\0’,n=sizeof("abcde"),此处n=6;特别注意的是,不论指针指向何类型,其所占字节数均为4。即一次寻址的长度。如char *p="abcde",n=sizeof(p),此处n=4原创 2011-10-21 18:51:51 · 726 阅读 · 0 评论 -
C++中的内存划分及管理
在C++中,把内存划分为四种存储区:1、栈2、堆3、全局/静态存储区域4、一个专门用来存放常量的区域栈:C++中用 的最多的存储结构,函数体中定义的变量通常放在栈上。它的申请和释放有系统专门管理,效率非常高,和堆比起来,不易产生内存碎片。堆:用malloc,new等分配的得到的得到的变量在堆上,而且要用free,delete手动释放动态申请的空间。堆申请的大小比栈大原创 2011-10-31 20:19:13 · 628 阅读 · 0 评论 -
类String的构造函数、析构函数和赋值函数
拷贝构造函数和赋值函数的区别:看看下面代码,仔细想想两者的区别。拷贝构造函数是在定义一个对象的时候调用的,如Class String{ //....};String a=b;//b为一个String类型的对象或者String a(b);赋值函数是在用一个类的实例去赋值给另一个实例的时候调用的,如String a;a=b;类String的构造函数、析构原创 2012-09-04 21:14:24 · 1079 阅读 · 1 评论