《C++数据结构-快速拾遗》 基础常识
1.命名空间函数
1 namespace wjy 2 { 3 void print() 4 { 5 cout<<"123"; 6 } 7 int load(int num) 8 { 9 return num; 10 } 11 } 12 using namespace wjy;
2.函数数组的实现
2.1利用重载函数实现
名字相同,参数或者返回值不同等。
1 int max(int a, int b) 2 { 3 return a>b?a:b; 4 } 5 double max(double a, double b) 6 { 7 return a>b?a:b 8 } 9 float max(float a, float b) 10 { 11 return a>b?a:b 12 }
2.2利用函数指针实现
注释:指针函数和函数指针的相关知识-->>http://blog.csdn.net/ameyume/article/details/8220832
1 #define _CRT_SECURE_NO_WARNINGS 2 #include <iostream> 3 using namespace std; 4 5 typedef struct DATA 6 { 7 int sNumb; 8 char sName[10]; 9 float sMath; 10 }DATA;//结构体定义比较类型 11 typedef bool(*FUNCP)(DATA, DATA);//定义指针函数类型 12 bool byNumb(DATA p, DATA m) 13 { 14 return (p.sNumb > m.sNumb); 15 } 16 bool byName(DATA p, DATA m) 17 { 18 return strcmp(p.sName, m.sName) < 0; 19 } 20 bool byMath(DATA p, DATA m) 21 { 22 return (p.sMath > m.sMath); 23 } 24 int main(int argc, char*argv[]) 25 { 26 DATA data1, data2; 27 data1.sNumb = 10; 28 strcpy(data1.sName, "abc"); 29 data1.sMath = 1.5; 30 31 data2.sNumb = 1; 32 strcpy(data2.sName, "wjy"); 33 data2.sMath = 2.9; 34 35 FUNCP ps[] = { byNumb,byName,byMath }; 36 cout << ps[0](data1, data2) << ps[1](data1, data2) << endl << ps[2](data1, data2) << endl; 37 return 0; 38 }
3.内联函数
C++实现:
inline max(itn a,int b) { return a>b?a:b; }
C语言实现:
define max(a,b) a>b?a:b;
4.堆空间申请内存
typedef struct SData: { int nNum; char sNum[20]; };
1 /*在堆空间申请内存*/ 2 int *p = new int;//申请一个普通变量 delete p 3 int *p = new int[10];//申请数组 delete []p 4 SData *p = new SData;//申请结构体对象 delete p 5 SData *p = new SData[10];//申请结构体数组 delete []p
5.成员函数
成员函数不占空间!!!
1 #include <iostream> 2 using namespace std; 3 struct STime 4 { 5 int nHour; 6 int nMin; 7 int nSec; 8 void SetTime(int a,int b,int c) 9 { 10 nHour = a; 11 nMin = b; 12 nSec = c; 13 } 14 }; 15 int main(int argc,char**argv[]) 16 { 17 STime wjy; 18 wjy.SetTime(1,2,3); 19 cout << sizeof(wjy); 20 while(1); 21 return 0; 22 }
C++成员函数用C语言实现:
1 #include <iostream> 2 using namespace std; 3 typedef struct STime 4 { 5 int nHour; 6 int nMin; 7 int nSec; 8 }; 9 void SetTime(STime* p,int a, int b, int c) 10 { 11 p->nHour = a; 12 p->nMin = b; 13 p->nSec = c; 14 } 15 int main(int argc, char**argv[]) 16 { 17 STime wjy; 18 SetTime(&wjy,1, 2, 3); 19 cout << sizeof(wjy)<<endl<<wjy.nHour<<endl << wjy.nMin<< endl << wjy.nSec; 20 //cout<<"123"; 21 while (1); 22 return 0; 23 }
6.预编译语句
1 #if true 2 //执行语句 3 #endif 4 5 #if false 6 //不执行语句 7 #endif
#ifdef _test_ //如果_test_被#define,那么就执行这句话 #else //如果没被#define,就执行这句话 #define _test_ #ifdef _test_ //run #else //not run
7.const的作用
这里暂时不考虑,等找工作前期再补上!https://chuanke.baidu.com/v1760453-135963-522762.html
8.类
参考吕鑫老师教程,进行类的基础概念巩固。
参考类两种初始化的区别:http://blog.csdn.net/ianchoi/article/details/6917899
8.1类的基础概念
A.类的赋值使用拷贝构造函数,看拷贝的类型决定深拷贝和浅拷贝!
CList::CList(CList& p) { memcpy(this,&p,sizeof(p));//拷贝构造函数 }
int a(10);//这也是拷贝构造函数的一种
B.先申请的后释放空间,后申请的先释放空间
1 //先释放list2,后释放list1 2 CList list1,list2;
C.static函数在类之中等于全局函数
class CList { DATA data; static int copy(DATA a,DATA b)//等于全局函数,this调用不到 { a = b; } }
1 CList::a = 0;//static初始化在类外全局初始化 2 class CList 3 { 4 static DATA a; 5 public: 6 DATA data; 7 static int copy(DATA a,DATA b)//等于全局函数,this调用不到 8 { 9 a = b; 10 } 11 };
D.在类中定义函数都会增加一个参数this
1 class wjy 2 { 3 void max(int a, int b ) 4 { 5 return a>b?a:b; 6 } 7 } 8 typedef bool(*FUNCP)(DATA,DATA);//定义指针函数类型就不能调用max,因为max有三个参数
F.函数中的static类
1 #include <iostream> 2 usiang namespace std; 3 4 typedef DATA int; 5 class wjy 6 { 7 DAAT node = 100; 8 } 9 void test() 10 { 11 static wjy class1; 12 wjy class2; 13 } 14 int main(int argc,char*argv[]) 15 { 16 test();//static第一次进入的时候进行构造.class2在每一次进入test的时候都进行构造 17 test();//class2在每一次进入test的时候都进行构造,同时退出的时候也进行析构 18 test();//class2在每一次进入test的时候都进行构造 19 return 0;//static 在main函数退出的时候才进行析构 20 }
8.2类的两种初始化区别
注释:曾经去面试的时候被问到了,一问三不知,属实尴尬!
1 //---在定义的时候分配空间,在构造的时候存放值 2 //---浪费内存,有时候定义的时候占一个空间,赋值的时候又占一个空间 3 class CList 4 { 5 int data; 6 CList(): 7 { 8 data =10; 9 } 10 } 11 12 //---在定义的时候分配空间并且初始化 13 //---初始化的顺序是按照定义的顺序执行,先初始化data,后初始化p 14 //---只占用一次内存 15 //---特殊的类型必须使用,例如:int为一个类,这个类只有一个参数的构造。 16 //--- int为一个const和引用的时候,不能再private初始化。 17 class CList 18 { 19 int data; 20 int p; 21 CList():p(100),data(10) 22 { 23 } 24 } 25 //----当然这两种初始化的顺序肯定是后者(列表函数初始化)先赋值而且好了。
https://chuanke.baidu.com/v1760453-135963-528979.html
作者:影醉阏轩窗
-------------------------------------------
个性签名:衣带渐宽终不悔,为伊消得人憔悴!
如果觉得这篇文章对你有小小的帮助的话,记得关注再下的公众号,同时在右下角点个“推荐”哦,博主在此感谢!