- 博客(17)
- 收藏
- 关注
原创 string的深浅拷贝以及写时拷贝问题
首先string的浅拷贝是让两个不同的指针指向同一块空间,而这在析构的时候会出现将一块空间释放两次,程序会崩溃,因此我们才需要进行深拷贝,即第二个指针开辟和第一个指针一样大小空间,然后将内容复制过去,不过深拷贝又分传统写法和现代写法,两者的区别主要在于拷贝构造和赋值运算符的重载上第一种就是传统写法,拷贝构造和赋值的时候正常开辟空间,正常拷贝内容class String { public: S
2017-04-07 21:50:47 1253 1
原创 探索C++对象模型
首先声明:下面的测试都是windoes32位 vs2013的环境下进行测试的: 本节的主要目标: - 探索多态的实现–虚表 - 探索单继承&多继承的对象模型 - 理解静态绑定和动态绑定 - 菱形继承&菱形虚拟继承的对象模型首先理解多态的定义,首先必须是继承的体系下有虚函数的重写,其次必须是父类的指针或者引用去调用子类的虚函数,只有这两个条件同时存在才能构成多态1.探索虚函数表 概
2017-04-01 23:48:50 524
原创 Linux下的find用法
想一下我们为什么要熟悉Find命令呢? Whereis和locate都可以用来查找,但是这两个是通过数据库来查因为没有实际查询硬盘所以相当快速,但是也会有其他问题 1)whereis命令只能用于程序名的搜索,而且只搜索二进制文件,man说明文件和源代码文件(省略参数时返回所有信息) 2)Whereis查找的快是因为Linux系统会将系统内所有文件都记录在一个数据库中,当使用Whereis和lo
2016-08-25 19:45:48 863
原创 Linux的文件权限与目录配置
1.在学习Linux的基础命令ls时,可以发现每个文件在Linux下面都会记录许多时间参数,其实是有三个主要的变动时间 先在命令行运行一下$stat 文件名 这三个时间分别是Access time,Modify time,Change time 它们的具体意思是: 1)accesstime(atime,访问时间),当“该文件内容被取用时”,就会更新这个时间,例如当我们使用cat 去读取这个文
2016-08-23 10:12:27 499
原创 使用两个栈实现一个队列
栈是后进先出,而队列是先进先出,所以可以采用如下方法 在s1中压入数据之后再将s1中数据挨个弹出压入s2中,此时s2栈中数据的出栈顺序即为队列的头出的顺序 代码如下class Solution { public: void Push(int data) { stack1.push(data); } void Pop() {
2016-07-20 10:44:25 502
原创 栈和队列面试题之--实现一个有getMin功能的栈
题目:实现一个特殊的栈,在实现栈基本功能的恶基础上,再实现返回栈中的最小元素操作 要求:pop push getMin操作的时间复杂度都是O(1) 看到题目可以想到大体分为两种思路,一是通过一个栈来实现;二则是通过两个栈来实现 我先实现用一个栈的 用一个栈的话就要一次压入两个值,data值,和记录的最小值Min, 方法是:向一个stack中压入数据data,第一次由于栈是空的,所以
2016-07-20 09:44:27 913
原创 泛型编程之模板 2
上次写了个Max函数,那么它能用来比较字符串吗? 我们传进 需要去的参数是地址,函数将直接比较两个地址的大小,所以显然不能比较字符串,那么如何让它能够比较字符串呢,我们就需要对模板函数进行特化1 模板函数特化:有时候我们并不能够写出对所有可能被实例化的模型都合适的模板,有些时候通用模板也有可能处理不了某个特定的类型,这时就需要对模板函数进行特化 现在我们来看特化后的字符串比较函数template
2016-06-28 20:23:10 393
原创 Mac 终端下简单命令介绍
首先必须要澄清一下,并不是只有程序员才会用到终端(对于好多不是码工的同学可能都有这个误会,在我码字之前我也是这么认为的),其实终端的命令行模式是个特别好用的东西,但是可能有同学会说终端的命令那么多,怎么记得住,但是没关系,记住一些常用的,剩下的有需要的时候翻看一下笔记就OK,不过一般常用的也不是很多。 一 简介 osx的文件系统 对于osx,它采用的是Unix的文件系统就,它将所有文件都放在
2016-06-19 13:00:21 873
原创 泛型编程 模板1
一 泛型编程 首先来看一段实现加法函数的代码int Add(const int &_iLeft, const int &_iRight) { return (_iLeft + _iRight); }这个函数现在只能接收int类型的数据,如果我们想让他成为通用的加法函数该怎么办呢? 根据我们在C++前一段时间所学的知识,有三种方法来解决这个问题,但是这些方法也有 各自不同的问题 函数重
2016-06-19 02:35:25 354
原创 C++之 继承
1 继承概念: 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持 原有类特性的基础上进行扩展,增加功能。这样产生新的类,称派生类。继承呈现了面向对象程序设 计的层次结构,体现了由简单到复杂的认知过程。他除了基类的构造函数和析构函数外全部继承(私有成员也可继承只是不能访问) 2 定义派生类:派生类必须通过使用类派生列表,明确的指出它是从哪些基类继
2016-06-18 11:55:22 715
原创 string类之深拷贝的两种写法
1 第一种就是普通写法,需要强调的地方不多,代码中有关地方已经给出注释/*#include<iostream> using namespace std; # class String { public: //这是系统默认的 String()//这是先给pstr开辟一个空间来存放'\0',注意'\0'的写法 :p(new char[1]) { *
2016-06-06 22:48:49 5233
原创 对无符号整形数的比特位反转
实现对一个无符号整形数的32比特位反转 然后返回这个二进制数的十进制 首先它有两种解决方式 1)设sum为0,bit为每次拿到的value的最后一位 sum先右移一位,然后将value和1相与,即拿到value的最后一位,然后让sum和bit相与得到sum的值,然后value向右移一位,拿到value的下一个二进制位 注意: sum<<一位不能放在sum第一次和bit或之后
2016-06-02 21:13:22 2889
原创 _cdel和thiscall调用约定
1 从尾到头打印单链表 方法 :运用递归 代码实现: void PrintfListFromTailToHead(PNode pHead) { if (pHead == NULL) { return; } else { PrintfListFromTailToHead(pHead->pnext);
2016-06-02 14:57:13 1004
原创 struct 和class关键字
浅谈struct与class关键字 1 c/c++中struct的区别 首先struct是C语言中定义结构体时使用; 而在C++中则可以用来定义类,那它在C++中使用和c 中有什么区别呢,来看下面一段代码#include "stdio.h" void fun() { printf("hello,world "); }
2016-06-02 10:44:55 1428
原创 操作符重载问题
操作符重载问题 1.为什么要使用重载操作符呢? 因为普通操作符只能识别内置类型,而对于自定义的类它并不能识别,我们也可以通过重新写一个函数来实现这些操作符的功能,但是这样的做法太麻烦,且代码可读性低.而使用重载操作符,可以令程序更自然、更直观,而滥用操作符重载会使得类难以理解,在实践中很少发生明显的操作符重载滥用。但有些程序员会定义operator+来执行减法操作,当一个重载操作符不明确时,给
2016-05-28 19:19:56 825
原创 C语言小程序
编写程序找出数组中的最大和最小值 #include int main() { int i=1; int arr[]={2,3,3,5,7,8}; int max=arr[0]; int min=arr[0]; for(i=1;i { if(max { max=arr[i]; } if(min>arr[i]) { min=arr[i]; } } printf("
2016-04-13 20:52:03 407
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人