c++
文章平均质量分 79
caoyan_12727
越努力越幸运
展开
-
c++继承和组合的区别
类的组合和继承一样,是软件重用的重要方式。组合和继承都是有效地利用已有类的资源。但二者的概念和用法不同。通过继承建立了派生类与基类的关系,它是一种 “是(is a)”的关系,如“白猫是猫”,“黑人是人”,派生类是基类的具体化实现,是基类中的一 种。通过组合建立了成员类与组合类(或称复合类)的关系,换句话说就是"有(has a)的关系".在功能上来看,它们都是实现系统功能重用,代码复用的最常用的有效转载 2016-08-27 21:59:44 · 5447 阅读 · 0 评论 -
欢聚时代(YY)面试
欢聚时代在广州的总部还是有点偏的,但是好在有专车接送,就方便多了。费话不多说,直接上题,下面是个人当时回答得不完整或是没回答上来的问题!!!问题1:#program pack(n)的作用在搞清楚这个问题之前先看看在vs2013环境下占用的字节大小:int main(){ cout << "long float:"<<sizeof(long float) << endl; cout原创 2016-10-09 21:35:28 · 4969 阅读 · 1 评论 -
小米2017校园招聘编程题
题目:代码:#include #include #include #include #include #include#include using namespace std;int total_level = 0;void BFS(int root,vector>&data,int level){ for (int i = 0; i原创 2016-09-23 22:01:07 · 894 阅读 · 0 评论 -
c++类对象初始化方式总结
在《inside the c++ object model》一书中谈到copy constructor的构造操作,有三种情况下,会以一个object的内容作为另一个object的初值:第一种情况: XX aa = a;第二种情况: XX aa(a);第三种情况: extern fun(XX aa); fun(a)函数调用第四种情况: XX fun(){...}; XX a = fun()原创 2016-09-08 11:39:44 · 37542 阅读 · 1 评论 -
leetcode-410. Split Array Largest Sum
题目:Given an array which consists of non-negative integers and an integer m, you can split the array into m non-empty continuous subarrays. Write an algorithm to minimize the largest sum among th原创 2016-10-22 11:58:41 · 1741 阅读 · 0 评论 -
C++类对象数据成员的构造函数初始化顺序
测试:#include #include #include #include#include#include#includeusing namespace std;class member1{public: member1(){ cout << "constuctor function of member1 class!" << endl; } ~membe原创 2016-09-27 22:40:56 · 2587 阅读 · 0 评论 -
设计模式-原型模式
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。这个其实和C++的拷贝构造函数的作用是一致的,实际上就是动态抽取当前对象运行时的状态。通过已有对象的clone方法可以克隆一个当前对象,但是涉及到一些资源时(比如指针所指向的内存)不进行共享,换句话说就是深拷贝;如此说来,用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。其中有一个词很重要,那就是拷贝。可以说,拷原创 2016-10-14 17:33:13 · 271 阅读 · 0 评论 -
网易编程题-合唱团
实现思路:动态规划/*[编程题] 合唱团有 n 个学生站成一排,每个学生有一个能力值,牛牛想从这 n 个学生中按照顺序选取 k 名学生,要求相邻两个学生的位置编号的差不超过 d,使得这 k 个学生的能力值的乘积最大,你能返回最大的乘积吗?输入描述:每个输入包含 1 个测试用例。每个测试数据的第一行包含一个整数 n (1 <= n <= 50),表示学生的个数,接下来的一行,包含 n原创 2016-09-30 17:34:50 · 967 阅读 · 0 评论 -
c++仿函数浅析
在讨论仿函数之前,我们先来看看sort排序的第二种用法:bool compare(int x,int y){ return x < y;}int main(){ vectorvec; for (int i = 0; i < 10; i++){ vec.push_back(rand()%50); cout << vec[i]<<" "; } cout << endl <<原创 2016-10-03 11:27:53 · 531 阅读 · 0 评论 -
c++异常处理
本文主要讨论为什么析构函数不建议抛出异常!!!class base{public: base(){ x = 1; y = 2; cout << "the object has constructed!"<< endl; } ~base(){ cout << "destructor has excuted!"<< endl; } int x ; int y;};原创 2016-10-03 22:53:46 · 348 阅读 · 1 评论 -
c++内存池作用和优势
C/C++下内存管理是让几乎每一个程序员头疼的问题,分配足够的内存、追踪内存的分配、在不需要的时候释放内存——这个任务相当复杂。而直接使用系统调用malloc/free、new/delete进行内存分配和释放,有以下弊端: 1.调用malloc/new,系统需要根据“最先匹配”、“最优匹配”或其他算法在内存空闲块表中查找一块空闲内存,调用free/delete,系统可能需要合并空闲内存块原创 2016-08-20 11:31:53 · 7642 阅读 · 0 评论 -
牛客网-最长递增子序列
/*最长递增子序列A给定一个长度为N的数组,找出一个最长的单调自增子序列(不一定连续,但是顺序不能乱)例如:给定一个长度为8的数组A{1,3,5,2,4,6,7,8},则其最长的单调递增子序列为{1,2,4,6,7,8},长度为6.输入描述:第一行包含一个整数T,代表测试数据组数。对于每组测试数据:N-数组的长度a1 a2 ... an (需要计算的数组)保证:1<原创 2016-10-05 19:24:38 · 757 阅读 · 0 评论 -
牛客网-并查集(交换位置)
题目:经过深思熟虑之后,小贱君打算去M国闯一闯,那是一个古老的东方国度,传说有很多高阶魔法师,他想成为一名伟大的魔法师,将来征服星辰大海。经过千辛万苦,小贱君终于来到了M国,不幸的是刚进城门小贱君就被M国的守城士兵困在了一种叫做“困兽之斗”的阵法之中。士兵对小贱君说:“看到漂浮在你身边的宝石了吗?彩虹连接的两颗宝石可以任意交换位置,你需要通过一系列交换后使得宝石组成的字符串的字典序最小原创 2016-10-05 20:21:31 · 511 阅读 · 0 评论 -
c++智能指针类实现
智能指针(smart pointer)是存储指向动态分配(堆)对象指针的类,用于生存期控制,能够确保自动正确的销毁动态分配的对象,防止悬垂指针的出现。在类对象中,如果定义一个int型的指针,当多次使用同一个已存在的对象初始化一些新建对象时,已存在的对象和新建的对象都指向同一块内存区域,当我们在使用某一个对象时释放了该内存空间,那么其它对象的int型指针域全都会失效,为了防止这种情况的产生,原创 2016-10-02 22:42:35 · 1000 阅读 · 0 评论 -
c++备忘录1
1.reinterpret _cast类型转换这种转换通常用于两种任何关联的两个对象之间的转换,它通常为操作数的位模式提供比较低层次的重新解释,举个例子:int main(){ int a = 1; int *p = &a; cout << p << endl; char ch = 'a'; int c = reinterpret_cast(p); short int b =原创 2016-10-04 10:46:01 · 693 阅读 · 0 评论 -
c++中malloc,free,new,delete区别和联系
在c/c++中,内存的管理一直是比较复杂的事情,而与内存的分配,释放相关的是malloc,free,new,delete,它们在内存管理中扮演着不同的角色,有相似的地方也有不同的地方,尤其是new操作符,可以被重载,由此产生更复杂的应用,本文将通过实例测试对上述的操作符或函数进行详细的分析!1.malloc2.3.4.原创 2016-07-31 23:28:43 · 559 阅读 · 0 评论 -
linux任务调度机制
进程调度在近几个版本中都进行了重要的修改。我们以2.6.9版为例过行分析。在进行具体的代码分析之前。我们先学习一下关于进程调度的原理。1:进程类型在linux调度算法中,将进程分为两种类型,即:I/O消耗型和CPU消耗型。例如文本处理程序与正在执行的Make的程序。文本处理程序大部份时间都在等待I/O设备的输入,而make程序大部份时间都在CPU的处理上。因此为了提高响应速度,I/O消耗程原创 2016-08-28 17:24:49 · 8417 阅读 · 0 评论 -
深入探索c++虚函数继承模型
关于c++虚函数的继承模型,在http://blog.csdn.net/haoel/article/details/1948051/一文中有详细的介绍,本文只是对虚函数继承的验证,具体如下。示例代码:#include#include#include#include#include#include#include#include#include#include#inclu原创 2016-06-08 22:07:55 · 400 阅读 · 0 评论 -
c++变量初始化规则
#include #include #include #include #include using namespace std;#define num 10000class BClass{public: BClass() : i(1), ci(2), ri(i){} // 对于常量型成员变量和引用型成员变量,必须通过参数化列表的方式进行初始化 //普通成员变量也可以放在函数原创 2016-08-29 21:42:45 · 844 阅读 · 0 评论 -
c++虚继承(2)
测试代码:#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;class Base {public: int a; Base(int x) :a(原创 2016-09-10 10:15:05 · 304 阅读 · 0 评论 -
c++const指针与函数调用
在我的博客http://blog.csdn.net/caoyan_12727/article/details/52064958中,已经讨论了动态绑定和静态绑定,以及在缺省参数情况下虚函数的绑定情况。一般情况下,我们是用非const的基类指针指向派生类对象,如果通过该指针调用虚函数则发生的动态绑定,如果我们定义一个const指针,指向派生类的对象,如果派生类里定义了同名的虚函数和const函原创 2016-09-10 10:50:01 · 1557 阅读 · 0 评论 -
c++数组地址解析
在c++语言中,一个二维数组可以有行地址和列地址,行地址和列地址之间可以相互转化。转化的规则是:在指向行地址的指针前面加一个*,就转化为指向列的指针。反之在指向列地址的前面加&,就成为指向行的指针!!!下面就用一张图来解释行地址和列地址的关系:在上述表示中,a[0]和*(a+0)等价,a[1]和*(a+1)等价,所以a[0]+1和*(a+0)+1都是指向第2004号内存单元。还有一原创 2016-09-15 12:59:58 · 2233 阅读 · 1 评论 -
总结笔记-c++成员变量、构造函数以及析构函数的执行顺序
在我的之前的博客http://blog.csdn.net/caoyan_12727/article/details/52356844有提到c++各种变量的初始化规则,本文将总结c++中涉及到的各种变量的初始化顺序和析构函以及构造函数初始化的顺序!!原创 2016-09-03 12:14:34 · 5180 阅读 · 0 评论 -
读书笔记-STL空间配置器(1)
c++一大重要组成部件就是STL(标准模板库),STL提供了六大组件,分别是:1、 容器(Containers):各种数据结构,如:vector、list、deque、set、map。用来存放数据。从实现的角度来看,STL容器是一种class template。2、 算法(algorithms):各种常用算法,如:sort、search、copy、erase。从实现的角度来看,STL算原创 2016-09-03 20:02:38 · 413 阅读 · 0 评论 -
从汇编看c++对象在栈空间内的构造
我们知道,类对象是c++中很重要的一部分,那么它的大小以及构造方式在汇编代码中是如何实现的呢?在一个程序的虚拟进程空间中,类对象的分布是怎样的呢?它们的构造方式和普通的内置类型有什么区别?下面我们就一起从汇编的角度来看看编译器是如何实现类对象的构造的,本文的所有系统环境环境为ubuntu16.04,个++编译。 1.让我们来看看最简单的情况:#include#includeusing原创 2016-07-20 18:06:37 · 1190 阅读 · 0 评论 -
读书笔记-STL迭代器之萃取技术
迭代器是一种抽象的设计概念,它提供一种方法,能够依序巡防某个容器的各个元素,而无需暴露该容器的内部数据的组织结构,将数据容器和算法(对容器内元素的操作)分开,彼此独立设计原创 2016-09-03 20:14:26 · 577 阅读 · 0 评论 -
KMP算法实现原理
KMP算法,是由Knuth,Morris,Pratt共同提出的模式匹配算法,其对于任何模式和目标序列,都可以在线性时间内完成匹配查找,而不会发生退化,是一个非常优秀的模式匹配算法。原创 2016-09-16 16:27:22 · 5671 阅读 · 5 评论 -
c++备忘录2
1.操作符重载,总结一下,个人觉得只有三种情况:情形a: 在类内部重载操作符class base{public: base(int x){ a = x; } base & operator+(base &obj1); void get_number(){ cout << a << endl; }private: int a;};base & base::ope原创 2016-10-06 18:26:55 · 411 阅读 · 0 评论