c++
南宫小仙僧
这个作者很懒,什么都没留下…
展开
-
关于C++多态的一些思考(编译期绑定和运行期绑定)
**C++中的多态必须具有以下三个前提条件: 1.必须存在一个继承体系结构 2.继承体系结构中的一些类必须具有同名的virtual成员函数(virtual是关键字) 3.至少有一个基类类型的指针或基类类型的引用。这个指针和引用可以对virtual成员函数进行调用 ** 一、考虑面向对象程序设计(c++语言描述)书上的一段程序清单,此时是(运行期绑定)#include<iostream>u原创 2017-03-28 14:22:47 · 1746 阅读 · 0 评论 -
map实例测试
#include<map>#include<iostream>#include<string>using namespace std;int main(){ map<string,int> simap; //以string为键值,以int为实值 simap[string("zhao")] =1; // The first pair is ("z原创 2017-07-19 10:57:46 · 420 阅读 · 0 评论 -
vector-STL源码及用法详解(源码面前了无秘密)
vector属于序列式容器。在C++中属于序列式容器的包含以下这些:array(C++内建)vectorheap(以算法形式呈现xxx_heap)priority-queuelistslistdequestack(配接器)queue(配接器)在C++中属于关联式容器的包含以下这些:RB-treesetmapmultisetmultimaphashtablehash_原创 2017-07-16 23:01:01 · 5000 阅读 · 1 评论 -
二维数组中的查找
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样一个二维数组和一个整数,判断数组中是否含有该整数。例如下面的二维数组就是每行,每列都递增排序。如果在这个数组中查找数字7,则返回true;如果查找数字5,由于数组不含有该数字,则返回false。1 2 8 9 2 4 9 12原创 2017-05-22 10:55:18 · 326 阅读 · 0 评论 -
单例模式(C++版)
单例模式最初定义出现在《设计模式》(艾迪生维斯理,1994):“保证一个类仅有一个实例,并提供一个访问它的全局访问点。”单例模式是设计模式中最简单的形式之一。这一模式的目的是使得类的一个对象成为系统中的唯一实例。要实现这一点,可以从客户端对其进行实例化开始。因此需要用一种只允许生成对象类的唯一实例的机制,“阻止”所有想要生成对象的访问。使用工厂方法来限制实例化过程。这个方法应该是静态方法(类方法),原创 2017-05-22 09:27:18 · 336 阅读 · 1 评论 -
微软编程题之在二元树中找出和为某一值的所有路径
输入一个整数和一颗二元树。从数的根节点开始往下访问一直到叶节点所经过的所有节点形成一条路径。打印出和输入整数相等的所有路径。 例如,输入整数20和如下二元树 10 6 14 4 8 12 16 则打印出原创 2017-05-03 09:28:33 · 335 阅读 · 0 评论 -
剑指offer面试题之赋值运算符函数
题目:如下为类型CMyString 的声明,请为该类型添加赋值运算符函数class CMyString{ public: CMyString(char* pData=NULL); CMyString(const CMyString& str); ~CMyString(); private: char* m_pData;};此时应该注意如下几点:1.返回值原创 2017-05-18 14:55:35 · 320 阅读 · 0 评论 -
深入理解C++中的深拷贝与浅拷贝
先说下自己的理解吧,浅拷贝,即在定义一个类A,使用类似A obj; A obj1(obj);或者A obj1 = obj; 时候,由于没有自定义拷贝构造函数,C++编译器自动会产生一个默认的拷贝构造函数。这个默认的拷贝构造函数采用的是“位拷贝”(浅拷贝),而非“值拷贝”(深拷贝)的方式,如果类中含有指针变量,默认的拷贝构造函数必定出错。 用一句简单的话来说就是浅拷贝,只是对指针的拷贝,拷贝后转载 2017-04-27 11:04:13 · 459 阅读 · 0 评论 -
KMP 算法图文详解
1、暴力匹配算法假设我们现在面临这样一个问题,有一个文本串 S 和一个模式串 P,现在要查找P在S中的位置,那么应该如何查找呢?我们很容易就想到暴力匹配的方法,假设现在文本串S匹配到 i 位置,模式串 P 匹配到 j 位置,则有:1.如果当前字符匹配成功(即S[i] == P[j]),则i++,j++,继续匹配下一个字符;2.如果失配(即S[i]! = P[j]),令i = i - (j - 1)原创 2017-05-16 10:53:35 · 3624 阅读 · 0 评论 -
C++内存管理------>以对象管理资源(Effective C++)
考虑如下一个类:class Investment{...};进一步假设,这个程序库通过一个工厂函数供应我们特定的Investment对象:Investment* createInvestment();//返回指针,指向Investment继承体系内的动态分配对象。调用者有责任删除它。现在考虑有个 f 函数履行了这个职责:void f(){ Investment* pInv=createInve原创 2017-05-05 16:31:40 · 369 阅读 · 0 评论 -
百度面试题之查找最小的K个元素
题目:输入n个整数,输出其中最小的K个 例如输入1,2,3,4,5,6,7,8这8个数字,则最小的4个数字为1,2,3和4思路1:显而易见,最简单的思路就是把输入的这组数据进行排序,然后输入最前面的K个数就行了,下面直接给出代码,代码比较简单,不多做解释#include<iostream>using namespace std;void swap(int &x,int &y){ int原创 2017-05-04 21:10:51 · 371 阅读 · 0 评论 -
微软编程题之求子数组的最大和
题目: 输入一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。要求时间复杂度为O(n)。 例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2, 因此输出为该子数组的和18。算法思想:每次加上数组中的一个正数时,和会增加,加上一个负数时,和会减小。如果当前的原创 2017-05-02 11:07:18 · 287 阅读 · 0 评论 -
STL源码剖析学习笔记之空间的配置与释放
对象构造前的空间配置和对象构造后的空间释放由<stl_alloc.h>负责,SGI对此的设计哲学如下:*向system heap 要求空间*考虑多线程(multi-threads)状态*考虑内存不足时的应变措施*考虑过多“小型区块”可能造成的内存碎片(fragment)问题C++的内存配置基本操作是::operator new()操作,内存释放基本操作是::operator delete()。这两原创 2017-04-17 15:19:24 · 434 阅读 · 0 评论 -
Google面试题之设计一个包含min函数的栈
定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min,push,以及pop的时间复杂度都是O(1)。算法思想:考虑增加一个辅助的堆栈,每次往原堆栈push数据时,同时将最小数据push到辅助堆栈中。具体原理如图所示:首先定义一个栈结构题:typedef struct{ int data[STACK_SIZE]; int top; int min;}Mi原创 2017-04-28 11:00:20 · 472 阅读 · 0 评论 -
STL源码剖析学习笔记之具备次配置力(sub-allocation)的SGI空间配置器
SGI特殊的空间配置器: std::alloc一般而言,我们所习惯的的C++内存配置操作和释放操作是这样的: class Foo {…}; Foo* pf=new Foo;//配置内存,然后构造对象 delete pf; //将对象析构,然后释放内存其中new算式内含两阶段操作: 1.调用 ::operator new 配置内存;template <class T>原创 2017-04-12 20:27:00 · 643 阅读 · 0 评论 -
C++标准模板库STL之初窥
**标准模板库(Standard Template Library,STL)是标准C++库的一部分。STL具有非常强大的功能,在开发大型复杂的应用程序时非常有用。**下面简单的介绍一下STL的三个基本组成部分:1.容器:对象的集合。包括vector,stack,queue,deque,list,set,map等。2.算法:STL算法是对容器进行处理的函数,例如copy,sort,search,me原创 2017-03-29 17:03:25 · 468 阅读 · 0 评论 -
C++类虚函数内存分布(非常重要!!!)
书上类继承相关章节到这里就结束了,这里不妨说下C++内存分布结构,我们来看看编译器是怎么处理类成员内存分布的,特别是在继承、虚函数存在的情况下。工欲善其事,必先利其器,我们先用好Visual Studio工具,像下面这样一步一步来: 先选择左侧的C/C++->命令行,然后在其他选项这里写上/d1 reportAllClassLayout,它可以看到所有相关类的内存布局,如果写上/d1 repo转载 2017-08-30 13:27:11 · 1692 阅读 · 0 评论