
C和C++
文章平均质量分 77
屁啦啦小魔仙
南京工程学院学生
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
STL读书笔记(一)
SGI 空间分配器具备次分配能力。 第一级配置器以malloc(),free(),realloc(),等C函数执行实际的内存配置、释放、重配置操作,并实现出类似C++ new handler的机制,是的,它不能直接运用C++ new handler机制,因为它并非使用::operator new 来配置内存。 所谓C++ new handler机制是,你可以要求系统在内存配置需求无法被原创 2017-10-22 22:26:19 · 335 阅读 · 0 评论 -
C++对C的升级
1.声明和定义我们在c语言中,通常把变量的声明放在文件开头,即所有要用到的变量统一定义,而在c++中,我们可以把变量的定义放在快要用到的时候,例如,for语句,在c中我们是int i = 3;for(i = 0; i {}而在c++中,我们可以for(int i = 0;i 2.register 关键字的升级在C语言中,register的作用是修饰一个变量,该变量经常原创 2017-02-07 09:34:39 · 341 阅读 · 0 评论 -
判断一个数是否是2的N次方
对于判断一个数是否为2的N次方问题,通常想到的最为直接的办法就是对这个数不断对2取余,为0就将该数变为该数除以2,直到最后该数为1为止。void judge(int n) { while(!(n % 2)) { n = n / 2; if(n == 1) { pri原创 2016-12-20 19:55:32 · 822 阅读 · 0 评论 -
堆(heap)和栈(stack)的区别
简单的可以理解为: heap:是由malloc之类函数分配的空间所在地。地址是由低向高增长的。 stack:是自动分配变量,以及函数调用的时候所使用的一些空间。地址是由高向低减少的。 预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据原创 2016-12-19 22:09:28 · 292 阅读 · 0 评论 -
enum的相关用法
在实际编程中,有些数据的取值往往是有限的,只能是非常少量的整数,并且最好为每个值都取一个名字,以方便在后续代码中使用,比如一个星期只有七天,一年只有十二个月,一个班每周有六门课程等。以每周七天为例,我们可以使用#define命令来给每天指定一个名字:复制纯文本复制#include #define Mon 1#define Tues 2#define Wed原创 2016-12-17 23:19:23 · 329 阅读 · 0 评论 -
联合体的用法
1.联合体union的基本特性——和struct的同与不同union,中文名“联合体、共用体”,在某种程度上类似结构体struct的一种数据结构,共用体(union)和结构体(struct)同样可以包含很多种数据类型和变量。不过区别也挺明显:结构体(struct)中所有变量是“共存”的——优点是“有容乃大”,全面;缺点是struct内存空间的分配是粗放的,不管用不用,全分配。而原创 2016-11-27 19:55:14 · 1208 阅读 · 0 评论 -
C中malloc和free总结
在C语言的学习中,对内存管理这部分的知识掌握尤其重要!之前对C中的malloc()和free()两个函数的了解甚少,只知道大概该怎么用—— 就是malloc然后free就一切OK了。当然现在对这两个函数的体会也不见得多,不过对于本文章第三部分的内容倒是有了转折性的认识,所以写下这篇文章作为一个对知识的总结。这篇文章之所以命名中有个“浅谈”的字眼,也就是这个意思了!希望对大家有一点帮助!原创 2016-11-26 22:12:18 · 428 阅读 · 0 评论 -
操作系统中调度算法
一、磁盘调度主要思想设备的动态分配算法与进程调度相似,也是基于一定的分配策略的。常用的分配策略有先请求先分配、优先级高者先分配等策略。在多道程序系统中,低效率通常是由于磁盘类旋转设备使用不当造成的。操作系统中,对磁盘的访问要求来自多方面,常常需要排队。这时,对众多的访问要求按一定的次序响应,会直接影响磁盘的工作效率,进而影响系统的性能。访问磁盘的时间因子由3部分构成,它们是查找(查找磁原创 2016-12-08 21:10:27 · 918 阅读 · 0 评论 -
Typedef用法总结
关于typedef的用法总结 不管实在C还是C++代码中,typedef这个词都不少见,当然出现频率较高的还是在C代码中。typedef与#define有些相似,但更多的是不同,特别是在一些复杂的用法上,就完全不同了,看了网上一些C/C++的学习者的博客,其中有一篇关于typedef的总结还是很不错,由于总结的很好,我就不加修改的引用过来了,以下是引用的内容(红色部分是我自己原创 2016-11-25 10:18:18 · 241 阅读 · 0 评论 -
C++const注意点以及用法
在我学习C++的过程中,对const的应用不可不说是最容易混乱和最容易出错的。但是const却是一个好东西,每一个C++程序员都必须掌握它。以下为本人的一点总结。 1、用const 修饰函数的参数 如果参数作输出用,不论它是什么数据类型,也不论它采用“指针传递”还是“引用传递”,都不能加const 修饰,否则该参数将失去输出功能。const 只能修饰输入参数。a, 如果输入参数采原创 2016-11-24 17:36:14 · 372 阅读 · 0 评论 -
堆,栈,内存泄漏和内存溢出
简单的可以理解为:heap:是由malloc之类函数分配的空间所在地。地址是由低向高增长的。stack:是自动分配变量,以及函数调用的时候所使用的一些空间。地址是由高向低减少的。一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中转载 2016-12-06 16:33:39 · 538 阅读 · 0 评论 -
单链表反序,逆序的两种方法
我先画一个单链表,这个单链表有4个元素。我的思路就是,每次把第二个元素提到最前面来。比如下面是第一次交换,我们先让头结点的next域指向结点a2,再让结点a1的next域指向结点a3,最后将结点a2的next域指向结点a1,就完成了第一次交换。第一次交换然后进行相同的交换将结点a3移动到结点a2的前面,然后再将结点a4移动到结点a3的前面就完成了反转。第原创 2016-12-05 21:42:36 · 5224 阅读 · 2 评论 -
c++易错题
1.如下代码输出结果是什么?12345678910111213141516#includechar*myString(){ charbuffer[6] = {0}; char*s = "Hello World!"; for(int i = 0转载 2017-01-16 11:21:52 · 401 阅读 · 0 评论 -
this指针的用法解释
先要理解class的意思。class应该理解为一种类型,象int,char一样,是用户自定义的类型。(虽然比int char这样build-in类型复杂的多,但首先要理解它们一样是类型)。用这个类型可以来声明一个变量,比如int x, myclass my等等。这样就像变量x具有int类型一样,变量my具有myclass类型。理解了这个,就好解释this了,my里的this 就是指向my的指针原创 2017-02-09 08:55:17 · 389 阅读 · 0 评论 -
C++进制问题总结
1.十进制转十六进制#include #include using namespace std;int main(){ //int m, n; long int n; vector v; char s[] = "0123456789ABCDEF";//字典 cin >> n; if (n 2147483647) {原创 2017-03-27 18:33:58 · 336 阅读 · 0 评论 -
C语言内存布局
转载自: http://blog.youkuaiyun.com/gatieme由C语言代码(文本文件)形成可执行程序(二进制文件),需要经过编译-汇编-链接三个阶段。编译过程把c语言文本文件生成汇编程序,汇编过程把汇编程序形成二进制机器代码,链接过程则将各个源文件生成的二进制机器代码文件组合成一个文件。 C语言编写的程序经过编译-连接后,将形成一个统一格式的二进制可执行文件转载 2017-09-01 21:16:03 · 413 阅读 · 0 评论 -
面试题Getmemory
题目一:[cpp] view plain copyprint?void GetMemory( char *p ) { p = (char *) malloc( 100 ); } void Test( void ) { char *str = NULL; GetMemory( str ); strcpy( str, "h原创 2017-09-12 08:21:15 · 641 阅读 · 0 评论 -
面试易错题整理(一)
派生类的构造函数的初始化列表中,不能包含( )。正确答案: C A.基类的构造函数B.派生类中子对象的初始化C.基类的子对象初始化D.派生类中一般数据成员的初始化解析:(1)派生类中的基类子对象和子对象必须初始化,初始化在派生类的构造函数的初始化列表中,如果初始化列表中没有进行初始化,则调用缺省的构造函数进行初始化。 (2)派生类构造函数原创 2017-08-21 16:06:07 · 406 阅读 · 0 评论 -
约瑟夫环问题(数组和list方法)
先介绍一下什么是约瑟夫环问题:就是N个人围成一圈,从开头(下标为0)报数,报到你设置的Number就要出局,几轮下来后剩下最后一个人输出这个人的序号!这里只介绍两种比较浅显易懂自己编写的代码,另外还有链表和递归的方式可以自行百度。ok,第一种我们用数组来写。int main(){ int total = 0; cout << "total:" << endl; cin >原创 2017-08-10 19:51:30 · 7426 阅读 · 0 评论 -
C++对象的内存布局(上)
转载自:http://blog.youkuaiyun.com/haoel/article/details/3081328对象的影响因素 简而言之,我们一个类可能会有如下的影响因素: 1)成员变量2)虚函数(产生虚函数表)3)单一继承(只继承于一个类)4)多重继承(继承多个类)5)重复继承(继承的多个父类中其父类有相同的超类)6)虚拟继承(使用virtua转载 2017-08-03 15:48:35 · 205 阅读 · 0 评论 -
虚函数表解析
原博客地址:http://blog.youkuaiyun.com/haoel/article/details/1948051前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。转载 2017-08-01 15:16:26 · 191 阅读 · 0 评论 -
C++内存布局(下)
原地址:http://blog.youkuaiyun.com/haoel/article/details/3081385重复继承 下面我们再来看看,发生重复继承的情况。所谓重复继承,也就是某个基类被间接地重复继承了多次。 下图是一个继承图,我们重载了父类的f()函数。 其类继承的源代码如下所示。其中,每个类都有两个变量,一个是整形(4字节),一个是字符(1字节),而且还有转载 2017-08-07 17:16:07 · 222 阅读 · 0 评论 -
C++new数组
定义二维数组char array[x][y]; 1.只定义个一维的就可以了 char *array; array = new char[x*y]; 访问的时候*(array+i*y+j)表示array[i][j] 2.定义一个二维数组 char **array1 array1 = new char *[x]; for(i=0;iarray1[i] = new c原创 2017-04-05 18:05:10 · 8321 阅读 · 0 评论 -
贪心算法
原文链接:http://blog.youkuaiyun.com/effective_coder/article/details/8736718有人说贪心算法是最简单的算法,原因很简单:你我其实都很贪,根本不用学就知道怎么贪。有人说贪心算法是最复杂的算法,原因也很简单:这世上会贪的人太多了,那轮到你我的份?转载 2017-03-16 08:57:24 · 802 阅读 · 1 评论 -
C++模板写计算器 带()
#include "stack.h"#include using namespace std;int main(){ Stack number_; Stack operator_; char src[100]; cout << "请输入表达式" << endl; cin >> src; int i = 0; while (1) { if (src[i] =原创 2017-03-15 09:18:59 · 1097 阅读 · 0 评论 -
数据结构之排序整理C++
例题1:给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1插入排序:题目代码:#includeusing namespace std;void Sort(int *a,int n){ //插入排序 int i,j,temp,k; for(i=1;i { temp = a[i]; for(j=i-1;j>=0&&a[j]原创 2017-03-22 13:04:41 · 568 阅读 · 1 评论 -
C++重要知识点
1.C++中类与结构的唯一区别是:类(class)定义中默认情况下的成员是private的,而结构(struct)定义中默认情况下的成员是public的。 2. ::叫作用域区分符,指明一个函数属于哪个类或一个数据属于哪个类。::可以不跟类名,表示全局数据或全局函数(即非成员函数)。 3.类名加载成员函数名之前而不是加在函数的返回类型前。错误:Tdate::void Set(i原创 2016-11-22 18:42:14 · 365 阅读 · 0 评论 -
scanf函数注意点
scanf函数我曾经在这个函数上犯过不少错误,也看到别人犯过的错误,记下来,提醒自己不要重蹈覆辙了。如果对你有用,那就更好了:)如果你发现文章中有错误,欢迎你不吝赐 教。希望和大家一起学习!曾经错的几个地方:(xpsp2,vc6.0环境下)1.空白符问题[objc] view plain copy print?#include原创 2016-12-03 19:12:40 · 488 阅读 · 0 评论 -
分配内存的函数C和C++
malloc:原型:extern void *malloc(unsigned int num_bytes); 头文件:在TC2.0中可以用malloc.h或 alloc.h (注意:alloc.h 与 malloc.h 的内容是完全一致的),而在Visual C++6.0中可以用malloc.h或者stdlib.h。 功能:分配长度为num_bytes字节的内存块 返回值:如原创 2016-11-28 21:07:55 · 406 阅读 · 0 评论 -
C++变量的声明与定义
①变量定义:用于为变量分配存储空间,还可为变量指定初始值。程序中,变量有且仅有一个定义。②变量声明:用于向程序表明变量的类型和名字。③定义也是声明:当定义变量时我们声明了它的类型和名字。④extern关键字:通过使用extern关键字声明变量名而不定义它。 1.定义也是声明,extern声明不是定义,即不分配存储空间。extern告诉编译器变量在其他地方定义了。例如:ext原创 2016-11-10 20:45:24 · 1171 阅读 · 0 评论 -
C++中虚函数与纯虚函数
首先:强调一个概念定义一个函数为虚函数,不代表函数为不被实现的函数。定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。定义一个函数为纯虚函数,才代表函数没有被实现。定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。1、简介假设我们有下面的类层次:[cpp] view plain copy原创 2016-10-28 19:36:17 · 274 阅读 · 0 评论 -
str-int函数
string/array to int/floatC/C++语言提供了几个标准库函数,可以将字符串转换为任意类型(整型、长整型、浮点型等)。● atof():将字符串转换为双精度浮点型值。● atoi():将字符串转换为整型值。● atol():将字符串转换为长整型值。● strtod():将字符串转换为双精度浮点型值,并报告不能被转换的所有剩余数字。● strtol():原创 2016-10-04 10:50:40 · 577 阅读 · 0 评论 -
数据结构—单链表双链表9.18
单链表结点类Node声明如下,成员变量data表示结点的数据域,保存数据元素,数据类型为T,next表示结点的指针域,保存后继结点的地址。文件名为Node.h template class Node { public; T data; Node*next; Node() { this原创 2016-09-18 18:57:06 · 395 阅读 · 0 评论 -
《数据结构和算法分析—C语言描述》读书笔记
第一章主要讲的是数学知识的复习,指数,级数什么的,最后,浅层次的谈了一下递归。 当一个函数用它自己来定义时就称为是递归(recursive)的,C语言是允许递归的。但重要的是要记住,C提供的仅仅是遵循递归思想的一种企图。不是所有的数学递归函数都能有效地或者正确地由C的递归模拟来实现。 举个递归的小例子: int x F(int X) { if(0 ==原创 2016-09-23 20:14:13 · 4234 阅读 · 0 评论 -
swap(a,b)四种方法
方法一:这个方法算是使用率最高的一个方法,我都用函数来写,比较好看点void swap(int &a,int &b){int temp = 0; temp = a;a = b;b = temp;}int main(){printf("please input a and b\n");scanf("%d%d",a,b);prin原创 2016-09-26 19:19:11 · 10083 阅读 · 4 评论 -
C++可重载函数
重载函数定义重载函数是函数的一种特殊情况,为方便使用,C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,也就是说用同一个运算符完成不同的运算功能。这就是重载函数。重载函数常用来实现功能类似而所处理的数据类型不同的问题。两个重载函数必须在下列一个或两个方面有所区别:1.、函数有不同参数。2、函数有不同参数类型,原创 2016-10-12 19:11:47 · 361 阅读 · 0 评论 -
C++基类和派生类
.基类和派生类关系 任何一个类都有可以派生出上个新类,派生类也可以再派生出新类,因此,基类和派生类是相对而言的。一个基类可以是另一个基类的派生类,这样便形成了复杂的继承结构,出现了类的层次。一个基类派生出一个派生类,它又做另一个派生类的基类,则原来基类为该派生类的间接基类。基类与派生类之间的关系可以有如下几种描述:1 派生类是基类的具体化类的层次通常反映了客观世界中某种真实原创 2016-10-11 19:13:27 · 4316 阅读 · 0 评论 -
堆和栈的概念以及区别
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两转载 2016-10-21 18:59:33 · 1723 阅读 · 0 评论 -
各变量在内存中的位置
在Linux中写一个程序,里面全局变量,局部变量,static,const,常数,数组,输出这些变量的地址(包括赋值的和没有赋值的,各类数据类型)#includeint a;int b = 1;int const c = 2;static int d;static int e = 3;char src1[20];char dest1[] = {'a','b'};int原创 2016-10-20 21:14:01 · 1063 阅读 · 0 评论 -
C++getline()函数解析
学习C++的同学可能都会遇到一个getline()函数,譬如在C++premer中,标准string类型第二小节就是“用getline读取整行文本”。书上给的程序如下:int main(){ string line: while(getline(cin,line)) cout return 0;}大家会发现运行时怎么也跳不出循原创 2016-11-12 20:37:52 · 614 阅读 · 0 评论