- 博客(36)
- 收藏
- 关注
原创 多继承和虚继承中sizeof(类)
知识点十四、虚函数表和虚函数针 虚函数的实现要求对象携带额外的信息,这些信息用于在运行时确定该对象应该调用哪一个虚函数。典型情况下,这一信息具有一种被称为 vptr(virtual table pointer,虚函数表指针)的指针的形式。vptr指向一个被称为vtbl(virtual table,虚函数表)的函数指针数组,每一个包含虚函数的类都关联到vtbl。当一个对象调用了虚函
2016-08-25 17:15:23 1443
原创 求一个9位数(dfs)
百度面试题:1-9的9个数字,每个数字只能出现一次 要求这样一个9位数:其第一位能被1整除,前两位能被2整除,前三位能被3整除。。。。依次类推,前9位能被9整除。//动态规划#include <iostream>#include <vector>using namespace std;bool used[10];//关键字为i,键值为1,表示i已被用过;键值为0,表示i未被使用vector
2016-08-22 16:27:19 478
原创 深拷贝与浅拷贝的区别
在有指针的情况下,浅拷贝只是增加了一个指针指向已经存在的内存,而深拷贝就是增加一个指针并且申请一个新的内存,使这个增加的指针指向这个新的内存,采用深拷贝的情况下,释放内存的时候就不会出现在浅拷贝时重复释放同一内存的错误! 浅拷贝:对象的数据成员之间的简单赋值。 例如,设计了一个没有类而没有提供它的复制构造函数,当用该类的一个对象去给令一个对象赋值时所执行的过程就是浅拷贝,如: class A
2016-08-22 15:49:33 1283
原创 剑指Offer-复制复杂链表
//复杂链表的赋值#include using namespace std;struct comListNode{ int val; comListNode *next; comListNode *sib;};//第一步,复制原始链表的任一结点N,并创建新结点N‘,再把新结点N'连接到结点N后面void CloneNode(comListNode *phead
2016-08-22 11:00:08 321
原创 面试总结(C++基础)
C++面试知识点汇总:一、多态性:实现了“一个接口,多种方法”。程序在运行时才决定调用的函数。从实现的角度来讲,多态可以分为两类:编译时的多态性和运行时的多态性。前者是通过静态联编来实现的,比如C++中通过函数的重载和运算符的重载。后者则是通过动态联编来实现的,在C++中运行时的多态性主要是通过虚函数来实现的。1)虚函数:(1)因为虚函数使用的基础是赋值兼容,而赋值兼容成立的条件是派生
2016-08-18 22:02:53 959
原创 C++ STL 的底层实现
C++ STL 的实现:1.vector 底层数据结构为数组 ,支持快速随机访问2.list 底层数据结构为双向链表,支持快速增删3.deque 底层数据结构为一个中央控制器和多个缓冲区,详细见STL源码剖析P146,支持首尾(中间不能)快速增删,也支持随机访问4.stack 底层一般用23实现,封闭头部即可,不用vector的原因应该是容量大小有限
2016-08-18 10:50:57 1827
原创 总结知识点(未完结)
知识点一、C语言与C++的区别是什么?1)C语言是面向过程,以事件为中心,采用自顶向下顺序执行,逐步求精。程序结构可划分为若干个功能模块,模块内部一般由顺序、选择和循环三种基本结构组成。模块形成树状结构,功能相对独立。利用子函数实现模块,而程序流程在写程序时就已经决定。举例子,五子棋。2)C++语言是面向对象,把数据及对数据的操作方法放在一起,作为一个整体对象。对同类对象抽象出其共性,即类
2016-08-17 20:11:23 642 1
原创 网易面试(C++基础)
一、strcpy函数的编写?(memcpy函数的编写)1)函数原型:extern char *strcpy(char *dest,const char *src);功能:将src所指由NULL结束的字符串复制到dest所指的数组中。位于string.h头文件里。注意:src和dest所指内存区域不可重叠,且dest必须有足够空间来容纳src的字符串; src字符串尾结束标
2016-08-17 16:40:10 7307 1
原创 海量数据(自我总结)
一、字典树/Trie树:1.是一种用于快速检索的多叉树结构。Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。优点:最大限度地减少无谓的字符串比较,查询效率比哈希表高。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。2.三个基本特性:1)根节点不包含字符,除根节点外每一个节点都只包
2016-08-17 16:37:49 734 1
原创 内存分类总结
C/C++编程中,经常需要操作的内存分为以下几类: 栈区(stack):用于存放程序临时创建的局部变量,如函数的参数值、局部变量值等,由编译器自动分配释放。 堆区(heap):一般由程序员申请和释放。用于存放进程运行中被动态分配的内存段,大小不固定,可动态扩张或缩减。若程序员不释放,程序结束时,可能由操作系统回收,但最好还是由程序员释放。注意:它与数据结构中的堆是两回事,分配方式类似数据结构中的
2016-08-11 15:11:30 693
原创 两个栈实现一个队列的功能
/两个栈实现一个队列template<typename T>class myqueue{public: //默认构造函数 myqueue(void); //默认析构函数 ~myqueue(void); //队列入队 void appendtail(const T& node) { stack1.push(node); } //队列出队 T
2016-08-11 11:12:52 269
原创 双链表的建立,删除及插入
#include <iostream>#include <stdio.h>using namespace std;struct DoubleList{ int data; DoubleList *pre; DoubleList *next;};//双链表的建立DoubldeList *CreatList(){ DoubleList *head=new Dou
2016-08-10 23:21:52 698
原创 Leetcode题集——sort-colors
题目描述Given an array with n objects colored red, white or blue, sort them so that objects of the same color are adjacent, with the colors in the order red, white and blue.Here, we will use the
2016-08-10 16:16:29 365
原创 Leetcode题集——search-a-2d-matrix
题目描述Write an efficient algorithm that searches for a value in an m x nmatrix. This matrix has the following properties:Integers in each row are sorted from left to right.The firs
2016-08-10 14:49:43 304
原创 Leetcode题集——set-matrix-zeroes
题目描述Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.click to show follow up.Follow up:Did you use extra space?A straight forward solution
2016-08-10 11:11:09 583
原创 C++如何实现只能动态分配类对象,不能定义类对象
动态分配类对象:就是使用运算符new来创建一个类的对象,在堆上分配内存。静态分配类对象:就是A a,由编译器创建类对象,在栈上分配内存。1)动态分配类对象把类的构造函数和析构函数设为protected属性。类对象不能访问,但是派生类可以继承,也可以访问。同时,创建create和destroy两个函数,用于创建类对象。(create函数设为static,原因是,创建对象的时候A *p
2016-08-09 15:49:25 3683
原创 单链表的基本操作(建立,输出及排序)
今天总结了一下单链表的基本操作:建立,求单链表长度,单//尾插法,新建一个链表ListNode *creatList( ){ ListNode *head,*p,*s; int x,cycle=1; head=new ListNode();//新建头结点, p=head;//p指向头结点 while(cycle)//当输入0时,停止链表的建立 {
2016-08-08 17:08:31 3567
原创 转换字符串格式
转换字符串格式为原来字符串里的字符+该字符连续出现的个数,例如字符串"1233422222",转换为1121324125(1出现1次,2出现1次,3出现2次,4出现1次,2出现5次)。解法:可通过sprintf语句,位于头文件中。与printf在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者直接打印到命令行输出。用法1):打印字符串。在大多数场合,可替代it
2016-08-08 14:19:44 700
原创 字符串的循环右移
题目来源:《程序员面试宝典》原来是“abcdefghi”,如果n=2,移位后应该是“hiabcdefg”。函数void LoopMove(char *pStr,int steps)//pStr是以‘/0’结尾的字符串,steps为要移动的n。解法一:利用strcpyvoid LoopMove(char *pStr,int steps){ int n=strlen(pStr
2016-08-07 21:30:54 379 2
原创 Leetcode题集——edit-distance
Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2. (each operation is counted as 1 step.)You have the following 3 operations permitted on a word:
2016-08-07 17:08:42 229
原创 Leecode题集——sqrtx
Implementint sqrt(int x).Compute and return the square root of x.直接遍历会超时,有两种方法:一是二分查找法,二是牛顿迭代法。方法一、二分查找法int sqrt(int x){ //鲁棒性检查,不合理输入 if(x<0) return -1; if(x==0) ret
2016-08-07 11:14:50 275
原创 单链表的翻转
//单链表翻转非递归法,返回翻转之后的头结点//方法一、带有头指针的单链表,原理:将第二个节点到最后一个节点依次插入到头结点之后ListNode* ListReverse(ListNode *head){ if(head==NULL) return NULL; ListNode *h=head; ListNode *p=h->next; h->next=NULL;/
2016-08-05 23:09:10 292
原创 Leetcode题集——plus-one
Given a number represented as an array of digits, plus one to the number.用数组表示的数字,将其+1,得到结果。跟Add Binary一样,从后往前检索,加上后进位。注意:但容器的话,插入要用insert函数。vector plusOne(vector &digits) { int n=di
2016-08-05 16:28:44 284
原创 Leetcode题集——minimum-path-sum
Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers along its path.Note: You can only move either down or righ
2016-08-05 11:20:33 213
原创 Leetcode题集——unique-paths-ii
Follow up for "Unique Paths":Now consider if some obstacles are added to the grids. How many unique paths would there be?An obstacle and empty space is marked as1and0respectively in the grid.
2016-08-05 10:48:24 207
原创 Leetcode题集——unique-path
A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below).The robot can only move either down or right at any point in time. The robot is trying to reach
2016-08-05 10:08:16 244
原创 Leetcode题集——Merge linked lists
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists./** * Definition for singly-linked list. * struct ListN
2016-08-04 21:02:09 307
原创 电脑上访问一个网页,整个过程是怎么样的
电脑上访问一个网页,整个过程是怎么样的:DNS、HTTP、TCP、OSPF、IP、ARP当在浏览器输入http://www.mytest.com:81/mytest/index.html,幕后所发生的一切。首先http是一个应用层的协议,在这个层的协议,只是一种通讯规范,也就是因为双方要进行通讯,大家要事先约定一个规范。1.连接 当我们输入这样一个请求时,首先要建立一个
2016-08-04 16:30:34 9099
原创 Session的原理
什么是Sesson?简单说就是一个会话级的cookie,外加服务器端内存中一组散列表。当你关闭浏览器的时候,这个cookie将消失。这个cookie不写在磁盘上,而是存在于浏览器缓存。 关于Session的传说传说中,Web应用程序中的Session和Application保存服务器端,而cookie保存在客户端。其实Session同时存在于
2016-08-04 14:35:32 280
原创 HTTP的长连接与短连接
1. HTTP协议与TCP/IP协议的关系HTTP的长连接和短连接本质上是TCP长连接和短连接。HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议。IP协议主要解决网络路由和寻址问题,TCP协议主要解决如何在IP层之上可靠的传递数据包,使在网络上的另一端收到发端发出的所有包,并且顺序与发出顺序一致。TCP有可靠,面向连接的特点。2. 如何理解HTTP协议是无状态的
2016-08-04 14:13:45 290
转载 进程间通信方式
进程间通信就是在不同进程之间传播或交换信息,那么不同进程之间存在着什么双方都可以访问的介质呢?进程的用户空间是互相独立的,一般而言是不能互相访问的,唯一的例外是共享内存区。但是,系统空间却是“公共场所”,所以内核显然可以提供这样的条件。除此以外,那就是双方都可以访问的外设了。在这个意义上,两个进程当然也可以通过磁盘上的普通文件交换信息,或者通过“注册表”或其它数据库中的某些表项和记录交换信息。广义
2016-08-03 21:43:48 301
原创 Leetcode题集——rotate-list
Given a list, rotate the list to the right by k places, where k is non-negative.For example:Given1->2->3->4->5->NULLand k =2,return4->5->1->2->3->NULL./** * Definition for singly-linked l
2016-08-03 16:16:47 262
原创 leetcode题集——spiral-matrix-ii
Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.For example,Given n =3,You should return the following matrix:[ [ 1, 2, 3 ], [ 8, 9, 4 ], [
2016-08-03 14:35:51 215
原创 线程之间共享的内容
在一个进程的线程共享堆区,而进程中的线程各自维持自己堆栈。线程共享的环境包括:进程代码段、进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)、进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID。 进程拥有这许多共性的同时,还拥有自己的个性。有了这些个性,线程才能实现并发性。这些个性包括: 1.线程ID
2016-08-02 23:18:41 2584
原创 Linux中系统调用和库函数调用的区别
Linux下对文件操作有两种方式:系统调用(system call)和库函数调用(Library functions)。系统调用实际上就是指最底层的一个调用,在linux程序设计里面就是底层调用的意思。面向的是硬件。而库函数调用则面向的是应用开发的,相当于应用程序的api,采用这样的方式有很多种原因,第一:双缓冲技术的实现。第二,可移植性。第三,底层调用本身的一些性能方面的缺陷。第四:让api也可
2016-08-02 22:53:46 297
原创 STL中的map和set
vector(向量)——STL中标准而安全的数组,底层数据结构为数组。只能在vector 的“前面”增加数据。deque(双端队列double-ended queue)——在功能上和vector相似,但是可以在前后两端向其中添加数据。 list(列表)——游标一次只可以移动一步。如果你对链表已经很熟悉,那么,list的底层实现是一个双向链表(每个节点有指向前驱和指向后继的两个指
2016-08-02 22:32:48 941
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人