博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
专题二经典问题解析_13
阅读量:6241 次
发布时间:2019-06-22

本文共 2872 字,大约阅读时间需要 9 分钟。

一。malloc与free 和 new与delete有什么区别

#include 
#include
using namespace std;class Test{ public: Test(int i) { cout <<"Test(int i)"<< endl; this->i = i; } Test() { cout <<"Test()" << endl; } ~Test() { cout <<"~~Test" <
(malloc(sizeof(int))); int* q = new int(10); *p = 5; // *q = 10; cout<< *p << " " << *q << endl; free(p); delete q; Test* op = reinterpret_cast
(malloc(sizeof(Test))); Test* oq = new Test; cout << op->getI() <<" "<< oq->getI()<< endl; free(op); delete oq;}int main(int argc, char *argv[]){ func(); cout << "Press the enter key to continue ..."; cin.get(); return EXIT_SUCCESS;}

  1.malloc和free是库函数,以字节为单位申请堆内存

  2.new和delete是关键字,以类型为单位申请堆内存。

  3.malloc和free单纯的对内存进行申请和释放

  4.对于基本类型new关键字会对内存进行初始化

  5.对于类类型new和delete还负责构造函数和析构函数的调用

二。剥夺编译器对构造函数的调用尝试

  c++提供了explicit关键字用于阻止编译器对构造函数的调用

explicit Test(int i)        {            cout <<"Test(int i)"<< endl;            this->i = i;        }

三。类的静态成员函数用来干嘛

  单例模式

#include 
#include
using namespace std;class Singleton{ private: static Singleton* cInstance; Singleton() { } public: static Singleton* GetInstance() { if(cInstance == NULL) { cInstance = new Singleton(); } return cInstance; } void print() { cout << "I'm Singleton" << endl; }};Singleton* Singleton::cInstance = NULL; void func(){ Singleton* s = Singleton::GetInstance(); s -> print();}int main(int argc, char *argv[]){ func(); cout << "Press the enter key to continue ..."; cin.get(); return EXIT_SUCCESS;}

四。无状态函数

  函数的调用结果只与实参值相关

  状态函数

  函数的调用结果不仅与实参值相关还与之前的函数调用有关

#include 
#include
using namespace std;int fib1(int i){ int a1 = 0; int a2 = 1; int ret = a2; while( i > 1) { ret = a2 + a1; a1 = a2; a2 = ret; i--; } return ret;}int fib2(){ static int a1 = 0; static int a2 = 1; int ret = a2; int t = a2; a2 = a2 + a1; a1 = t; return ret;}class Fib{private: int a1; int a2;public: Fib() { a1 = 0; a2 = 1; } int operator() () { int ret = a2; int t = a2; a2 = a2 + a1; a1 = t; return ret; }};int main(int argc, char *argv[]){ cout<<"int fib1(int i)"<

两中实现的问题:

  1.fib1是以无状态函数的方式实现的,求解数列的每一项都会做重复的循环,时间的复杂度为0(n)

  2.fib2是以状态函数的方式实现的,每调用一次就可以得到数列当前项的值,时间复杂度为0(1),但是无法从头再来

转载于:https://www.cnblogs.com/lvxiaoning/p/7644969.html

你可能感兴趣的文章
iphone遮住听筒/感应器/摄像头黑屏的解决办法
查看>>
python 抓取alexa数据
查看>>
UART、SPI和I2C详解
查看>>
兼容N多浏览器的CSS阴影效果
查看>>
Multiple arguments in Django template filters
查看>>
ARM11-Linux2.6-Button-Driver-Base-info
查看>>
抽屉Panel的研究
查看>>
In-App Purchase
查看>>
深圳it公司
查看>>
glog 使用中存在的问题
查看>>
WCF, the Service attribute value in the ServiceHost directive could not be found.
查看>>
Scriptcase价格调整(五折销售)
查看>>
【转】 编写C#调用的C++DLL
查看>>
Programming Concepts
查看>>
【Linux】用grep在文档中查找内容
查看>>
音视频编码格式和封装格式的关系和区别是什么?
查看>>
ORACLE 表空间使用率查询
查看>>
cadence制作封装要素
查看>>
Web实时通信
查看>>
dump java
查看>>