Effective C++读书笔记----自定义类型的传参和返回值问题

对于自定义类型,传参的时候尽可能的使用传引用来代替传值。 看如下这个例子: #include <iostream> using namespace std; #include <string> c...

2018-08-05 13:18:13

阅读数 44

评论数 0

Effective C++ 读书笔记----接口和类的设计

设计接口时要让接口容易被正确使用,不易被误用。应该让接口具有如下这些性质: “促进被正确使用”,接口的一致性(比如STL中各个容器的接口)以及与内置类型的行为兼容。自定义的类型支持的操作尽量与内容类型的使用保持一致。 “阻止误用”的办法包括建立新类型、限制类型上的操作,束缚对象值,以及消除对象...

2018-08-05 09:59:23

阅读数 41

评论数 0

Effective C++读书笔记----资源管理

C++中,我们自己申请的资源,需要我们手动的释放。 有时候我们给了显示释放资源的语句,但是存在有些意外情况导致释放语句没能成功被执行。比如说在执行释放语句前函数提前返回;假如释放语句在一个循环内部,循环因为continue或者break提前结束;执行释放语句之前程序抛异常了。 为了防止资源泄漏,...

2018-08-04 11:15:07

阅读数 50

评论数 0

Effective C++读书笔记----构造/析构/赋值运算

对于一个空类,编译器会自动创建构造函数、拷贝构造函数、赋值运算符重载以及析构函数。(当然只有在这些函数在被调用的时候才会被编译器创建出来)如果我们在类中显示的声明了这些函数,编译器将不再自动生成这些函数。 当类的成员变量中有引用类型或者有const修饰,编译器不会为该类生成赋值运算符重载函数,尽...

2018-07-30 18:14:52

阅读数 57

评论数 0

Effective C++读书笔记---让自己习惯C++

* 声明式是告诉编译器某个东西的名称和类型。 * 签名式是指参数和返回值。一个函数的签名等同于该函数的类型(C++对签名式的官方认定不包括返回值) * 将函数声明为 explicit ,可以阻止他们被用来执行隐式转换,但他们仍可以用来进行下你是类型转换 * 其他静态成员只能在类里边进行声明...

2018-07-29 16:53:47

阅读数 190

评论数 0

二级空间配置器的原理剖析和简单实现

首先来讲一下频繁地向系统申请小内存块的缺点  用户代码与操作都是在用户态,而操作系统是属于内核态的,用户在向系统申请空间的时候是通过操作系统来申请的,所以,每一次空间申请就会进行用户态与内核态之间的切换,会大大降低效率。        系统在将一块空间交给用户去使用的时候,并不是就将这块空间交...

2018-06-06 18:22:03

阅读数 173

评论数 0

SGI一级空间配置器的简单介绍与实现

#pragma once #include <new> #include <iostream> using namespace std; #define THROW_BAD_ALLOC cerr&am...

2018-05-29 17:12:36

阅读数 60

评论数 0

实现一个类只能在栈(堆)创建对象

禁用new运算符实现只能在栈上创建对象的类       其实只要不使用new操作符,类创建出来的对象就是在栈上创建的。但是,当你声明了一个类,难免会使用new操作符去创建一个对象,就算你能保证自己不使用new,也难以保证别人不去使用new。为了保证一个类的对象都是在栈上创建,那么,最有效的方式就是...

2018-03-21 23:18:24

阅读数 90

评论数 0

不用+-*/实现加法运算

题目:实现一个Add函数,让两个整数相加,但是不能使用+ - * /等四则运算符。      从题目来看这道题还是比较苛刻了,其实解决起来也不难。既然不能使用四则运算,应该是本能的就想到使用位操作了。首先来讲解一下大致的思路,使用 异或^ 操作来完成对应位相加操作,再使用 按位与&...

2018-03-04 23:49:19

阅读数 367

评论数 0

多种方法实现加法求和

题目:求1+2+3+……+n的和,要求不能使用乘除法、循环、条件判断、选择相关的关键字。首先来回忆一下求1+2+3+……+n的和的最基础的几种解法:法1:int Sum(int n){     int sum = 0;     while (n)          sum += n--;     ...

2018-03-04 22:36:07

阅读数 85

评论数 0

斐波那契数列的四种实现方式以及时间、空间复杂度

首先来介绍一下斐波那契数列:        斐波那契数列(Fibonacci sequence),又称黄金分割数列。因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”。指的是这样一个数列:1、1、2、3、5、8、13、21、34、……...

2017-11-25 13:26:07

阅读数 590

评论数 0

实现类的单例模式的两种简单方式

类的单例模式就是保证一个类仅有一个实例,并提供一个访问它的全局访问点。 说到设计一个类只能有一个实例,相信很多人第一反应都会想到类的静态成员,毕竟类的静态成员有着自己的特性,它是被所有类对象共享的,也就是他只有一份,而且类的静态成员变量是必须在类外进行初始化的。在了解了这两个特性之后(当然类的静...

2017-11-22 17:40:51

阅读数 757

评论数 0

动态创建二维数组的两种方法

首先来讲解一下什么是二维数组。其实二维数组也可以说是一个一维数组,只是这个一维数组比较特别,它的每一个元素都是一个一维数组。虽然二维数组在底层是按照一维数组的存储方式来存储的,即存完第一行,紧跟着存第二行,后边依次存储剩下的行。但是我们习惯上把它看做矩阵,一般也选择让他以矩阵的方式呈现在我们眼前,...

2017-11-18 10:44:39

阅读数 4334

评论数 2

C++知识总结

2017-11-15 15:32:27

阅读数 101

评论数 0

C++类型萃取

在利用模板来实现容器vector的时候,由于是泛型编程,所以参数类型是可以说是任意的,而当我们希望实现对一块连续空间进行拷贝的时候,有两种实现方式,一种是memcpy函数实现,另一种则是通过for循环一个一个赋值。 memcpy是一种很高效的方式,但是,当拷贝自定义类型时就会牵扯到深浅拷贝的...

2017-10-28 19:34:36

阅读数 106

评论数 0

模板与泛型编程

当我们希望可以用同一个函数处理不同类型的参数时(比如写一个加法函数,可以处理各种不同类型的数据)都有哪些方法呢? 1、函数重载(同一作用域;函数名相同;参数列表不同) 缺点:         a、只要有新类型出现,就必须添加对应的函数         b、除了类型外,所有的函数体都相同,代码的复用...

2017-10-21 17:25:02

阅读数 602

评论数 0

模板类实现顺序表

顺序表在前边已经实现过很多次了,在这里就不多做介绍了,本文主要讲解如果利用模板类的方式实现顺序表和一个顺序从另一个顺序表拷贝内容时的一些注意事项。 PS:本文统一采用的是利用for循环一个一个赋值的形式。 直接来看代码: 头文件和函数声明 Vector.h 部分 #include ...

2017-10-16 20:54:25

阅读数 145

评论数 0

多态

       什么是多态?多态的定义       多态按字面的意思就是“多种形态”。在面向对象语言中,接口的多种不同的实现方式即为多态。比如说上厕所,男生进男厕所,女生进女厕所。同为上厕所,性别不同去的厕所就不一样,这就是多态。多态的分类       多态的类型是根据对象的类型来决定的,而对象的类...

2017-10-14 11:32:24

阅读数 80

评论数 0

浅谈static关键字和extern关键字

一、static关键字       在C语言中        static可以用来修饰局部变量,全局变量和函数。不同情况下作用也不同。      (1)、修饰局部变量        局部变量一般存放于栈中,其作用域和生命周期都是在其定义的代码块内。当用static修饰局部变量时,它的生命周...

2017-10-02 14:58:50

阅读数 145

评论数 0

C语言和C++的区别(函数重载)

C和C++的区别主要分为三部分:   接下来详细介绍一下函数部分的区别 1、返回类型   2、参数列表 此外,在C++中还支持缺省参数,而C语言不支持。 什么是缺省参数呢? 缺省参数是声明或定义时为函数的参数指定一个默认值。在调用函数时,如果没有指定实参,则采用...

2017-10-02 13:32:21

阅读数 163

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭