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

本文共 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

你可能感兴趣的文章
Angular-ui-router入门
查看>>
ngx.re.match
查看>>
跨浏览器的事件对象
查看>>
隐马尔可夫HMM中Forward算法
查看>>
$.ajax()方法详解
查看>>
iBatis.Net(4):DataMapper API
查看>>
luogu P2860 [USACO06JAN]冗余路径Redundant Paths
查看>>
smarty使用
查看>>
【总结整理】新闻列表的时间格式
查看>>
【总结整理】webstorm插件使用
查看>>
__setitem__,__getitem,__delitem__的作用
查看>>
单表级联查询
查看>>
noi 2989 糖果
查看>>
微信小程序 发现之旅(一)—— 项目搭建与页面跳转
查看>>
Intellij Idea 创建EJB项目入门(一)
查看>>
Spring的事务管理基础知识
查看>>
面向对象 继承
查看>>
【温故而知新】HTTP 概述
查看>>
JCM参数配置及查看deap
查看>>
mac的日常使用总结
查看>>