
C++
文章平均质量分 56
周大侠
这个作者很懒,什么都没留下…
展开
-
[微软]题目2 : Total Highway Distance
时间限制:10000ms单点时限:1000ms内存限制:256MB描述Little Hi and Little Ho are playing a construction simulation game. They build N cities (numbered from 1 to N) in the game and connect them by N-1 highways. It is原创 2015-09-29 21:25:48 · 1172 阅读 · 2 评论 -
[LeetCode] Reverse Linked List II(!!!)
Reverse Linked List II Reverse a linked list from position m to n. Do it in-place and in one-pass. For example: Given 1->2->3->4->5->NULL, m = 2 and n = 4, return 1->4->3->2->5->NULL.原创 2015-09-05 14:58:09 · 307 阅读 · 0 评论 -
[C++] 模板与泛型编程(1)
面向对象编程(OOP)和泛型编程都能处理在编写程序时不知道类型的情况。不同之处在于,OOP能处理类型在程序运行之前都未知的情况;而在泛型编程中,在编译时就能获知类型了。STL中典型的容器、迭代器和算法都是泛型编程的例子。模板是泛型编程的基础。函数模板先说明下函数重载,重载就是函数名相同但实参的类型或数量不同的函数的调用。注意有两种:实参是类型不同或数量不同。(为什么不说形参,因为会有默认值的存在)如原创 2015-09-03 22:54:43 · 410 阅读 · 0 评论 -
可调用对象
c++中常常可以重载算法(for_each等)或智能指针中一些函数可以用可调用对象重载。先以unique_ptr来说明 unique_ptr是智能指针的一种,可以独占所指向的对象。 unique_ptr使用直接初始化新式。unique_ptrint> p2(new int(42)); //p2指向一个值为42的int因为unique_ptr独占所指向的对象,因此uniqu原创 2015-08-18 21:13:11 · 492 阅读 · 0 评论 -
[C++] 模板与泛型编程(2)
类模板类模板(class template)是用来生成类的蓝图的。与函数模板的不同之处是,编译器不能为类模板推断模板参数类型实现strblob的模板版本,提供对元素的共享(且核查过的)访问能力。template <typename T> class Blob{public: typedef T value_type; typedef typename std::vector<T>:原创 2015-09-04 14:53:07 · 393 阅读 · 0 评论 -
[LeetCode] Remove Duplicates from Sorted List II
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list. For example, Given 1->2->3->3->4->4->5, return 1->2->5. Given原创 2015-09-09 21:13:12 · 304 阅读 · 0 评论 -
数组及多维数组
c++中没有多维数组的概念,多维数组就是数组的数组。按照从内向外的阅读顺序有助于更好地理解其真实含义。在c++11中增加了范围for的使用二重for来处理二维数组size_t cnt=0;int ia[r][c];for(size_t i=0; i!=r; ++i) for(size_t j=0; j!=c; ++j){ ia[i][j]=cnt; ++c原创 2015-08-23 17:31:11 · 422 阅读 · 0 评论 -
new malloc(待更新)
1、new是运算符(C++),malloc是函数(c++/c) 2、new 返回指定类型的指针,并且可以自动计算所需要大小 malloc 则必须要由我们计算字节数,并且在返回后强行转换为实际类型的指针。 3、malloc 只管分配内存,并不能对所得的内存进行初始化,所以得到的一片新内存中,其值将是随机的。 new 可以使用构造函数初始化对象。深层次的内容待讨论原创 2015-07-24 19:10:28 · 316 阅读 · 0 评论 -
进程通讯
进程间通讯的方式:管道 管道是一种特殊的文件,对于进程来说,它和普通的文件没什么区别。1)管道是半双工的,数据只能一个方向流动;需要双方通信时,需要建立两个管道。 2)管道只能用于父子进程或兄弟进程之间。int pipe(int fileds[2]);创建一对指向管道inode节点为文件描述符,将其保存在fields数组中。fileds[0]用于读取,fileds[1]用于写入。进行父子进程之间原创 2015-07-24 14:14:24 · 312 阅读 · 0 评论 -
引用 指针的区别
简单来说 1. 引用不能为空,指针可以为空。 定义一个引用一定要初始化。 使用指针之前必须做判空操作,而引用不必。 2. 引用不能改变指向,指针不能改变指向。 3. 引用的大小是指向的变量的大小,指针是指针本身的大小,32位系统中4个字节。 4. 引用比指针安全,多个指针指向同一个变量,其中一个free了,其他都成了野指针。 更加详细的参见 http://blog.youkuaiyun.com转载 2015-07-24 14:44:23 · 333 阅读 · 0 评论 -
线程通信 线程同步(未完待续)
首先回答死锁的定义,所谓死锁就是一个进程集合中的多个进程因为竞争资源,而造成的互相等待现象。死锁的原因:系统资源不足;多个进程的推进顺序不合理死锁的必要条件:互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用。 请求与保持条件(Hold and wait):已经得到资源的进程可以再次申请新的资源。 非剥夺条件(No pre-emption):已经分配的资源不能从相应原创 2015-07-24 14:38:05 · 354 阅读 · 0 评论 -
[智力题]
在一个重男轻女的国家里,每个家庭都想生男孩,如果他们生的孩子是女孩,就再生一个,直到生下的是男孩为止。这样的国家,男女比例会是多少?答案: 1:1假设有n对夫妇,生出n个孩子,由于生男生女比例相同,所以这n个孩子中有n/2个男孩,n/2个女孩(1:1) n/2对生女孩的夫妇继续生,只是问题的规模变小了还是一半生男孩(n/4)一半生女孩(n/4)(1:1) 所以一直这样下去 就是1:1。原创 2015-07-23 21:20:01 · 579 阅读 · 0 评论 -
[2016面试]海量数据处理
互联网公司面试很喜欢问海量数据的查找(查找某个数,查找重复的数,查找未出现的数等等)、排序(全部排序、部分排序,找出第k大的数,找出前k大的数等等)等问题,基本的问题都是数据量很大(内存不够存放——降低空间复杂度)和性能要求高(运行时间有要求——减低空间复杂度) 这里列出一些常见的一些问题来处理已知某个文件内包含一些电话号码,每个号码为8位数字,统计不同号码的个数。 8位最多99 999 99原创 2015-07-23 19:52:52 · 617 阅读 · 0 评论 -
[LeetCode] Clone Graph(!!!!graph&dfs&bfs)
Clone Graph Clone an undirected graph. Each node in the graph contains a label and a list of its neighbors. OJ’s undirected graph serialization: Nodes are labeled uniquely. We use # a原创 2015-09-10 22:37:06 · 362 阅读 · 0 评论 -
[LeetCode]Restore IP Addresses(!!!!BackTrace)
Restore IP Addresses My Submissions Question Solution Total Accepted: 41299 Total Submissions: 192823 Difficulty: Medium Given a string containing only digits, restore it by returning all原创 2015-09-26 22:08:57 · 430 阅读 · 0 评论 -
各种排序算法实现及总结
本文主要比较一下各种排序的性能(平均时间复杂度和最差情况)和基本实现。 这个默认按照从小到大排列,输入的数据可以重复,假设输入的数组为A,下标从0到N-1注意在比较算法复杂度时,我们会关注键值的比较次数和交换次数。1、冒泡排序 冒泡排序如果不是因为名字比较好记,没有任何优势。它的思路是一趟又一趟的比较数组(或者链表也可以)中相邻的两个元素,如果前一个比后一个大,则交换。这样,每一轮之后,最大的那原创 2015-08-21 21:20:18 · 687 阅读 · 0 评论 -
[LeetCode] Gray Code
Gray Code My Submissions Question Solution Total Accepted: 41835 Total Submissions: 125744 Difficulty: Medium The gray code is a binary numeral system where two successive values differ in only原创 2015-09-16 20:42:05 · 350 阅读 · 0 评论 -
[LeetCode] Decode Ways(!!!DP)
Decode Ways My Submissions Question Solution Total Accepted: 47576 Total Submissions: 290697 Difficulty: Medium A message containing letters from A-Z is being encoded to numbers using the follow原创 2015-09-16 13:24:11 · 352 阅读 · 0 评论 -
[微软]题目4 : Image Encryption
时间限制:10000ms单点时限:1000ms内存限制:256MB描述A fancy square image encryption algorithm works as follow:0. consider the image as an N x N matrix1. choose an integer k∈ {0, 1, 2, 3}2. rotate the square image k原创 2015-09-29 21:27:28 · 864 阅读 · 2 评论 -
[微软]题目1 : Farthest Point
题目1 : Farthest Point时间限制:5000ms单点时限:1000ms内存限制:256MB描述Given a circle on a two-dimentional plane.Output the integral point in or on the boundary of the circle which has the largest distance from th原创 2015-09-29 21:24:20 · 1032 阅读 · 0 评论 -
[微软]题目3 : Fibonacci
时间限制:10000ms单点时限:1000ms内存限制:256MB描述Given a sequence {an}, how many non-empty sub-sequence of it is a prefix of fibonacci sequence.A sub-sequence is a sequence that can be derived from another seque原创 2015-09-29 21:26:30 · 703 阅读 · 0 评论 -
[LeetCode]Validate Binary Search Tree
Given a binary tree, determine if it is a valid binary search tree (BST).Assume a BST is defined as follows:The left subtree of a node contains only nodes with keys less than the node's key.The right原创 2015-09-29 11:10:23 · 273 阅读 · 0 评论 -
[C++]模板与泛型编程(3)
成员模板普通(非模板)类的成员模板 我们设计一个类,包含一个重载的函数调用运算符,它接受一个指针并对此指针执行delete。与默认删除器不同,我们还在删除器被执行时打印一条信息。class DebugDelet{public: DebugDelet(std::ostream &s =std::cerr):os(s){} //与任何函数模板一样,T的类型有编译器推断 tem原创 2015-09-04 21:43:30 · 303 阅读 · 0 评论 -
[LeetCode] Unique Binary Search Trees(!!DP)
Unique Binary Search Trees Given n, how many structurally unique BST’s (binary search trees) that store values 1…n? For example, Given n = 3, there are a total of 5 unique BST’s. 1 3原创 2015-09-27 13:38:08 · 297 阅读 · 0 评论 -
[C++] volatie关键字
volatie关键字在嵌入式系统中这个关键字用的比较多,主要的用途是避免的编译器的优化。提醒它所声明的这个变量随时可能改变,所以,编译后的程序每次需要存储或读取这变量的时候,都会直接从变量地址中读取数据。比如一个信号量是某个 io口的高低电平,由于访问寄存器的速度要快于RAM,所以编译器一般都会作减少存取外部RAM的优化。一般来说,volatile用在如下的几个地方 1、中断服务程序中修改的供其原创 2015-09-11 15:10:57 · 693 阅读 · 0 评论 -
[C++]C++11新特性
1、for 遍历数据的几种方式 第一个不好,万一numSet[i]不是O(1)的呢,容器可不止vector一种。 第二个太长了。 第三个是推荐的。 第四个是VC++的C++/CLI或C++/CX扩展,不过他跟第三个其实完全没有区别,因为互相都可以用。 第五个很难讲,主要是你要把整个程序写成函数式或响应式的,用这个才有额外的好处。原创 2015-09-14 09:45:12 · 327 阅读 · 0 评论 -
[LeetCode] Binary Tree Inorder Traversal
Binary Tree Inorder Traversal My Submissions Question Solution Total Accepted: 85535 Total Submissions: 232962 Difficulty: Medium Given a binary tree, return the inorder traversal of its nodes’原创 2015-09-26 22:58:56 · 291 阅读 · 0 评论 -
[C++]函数调用栈
函数调用时发生栈内存上的,这里主要涉及几个元素,函数调用,被调函数,函数参数。 涉及的过程主要有使用堆栈传递函数参数、保存返回地址、临时保存寄存器原有值(即函数调用的上下文)以备恢复以及存储本地局部变量。程序的内存可以参考进程内存 对于程序,编译器会对其分配一段内存,在逻辑上可以分为代码段,数据段,堆,栈 代码段:保存程序文本,指令指针EIP就是指向代码段,可读可执行不可写 数据段:保存初始原创 2015-09-12 16:40:16 · 2487 阅读 · 1 评论 -
虚函数
OOP的核心是数据抽象、继承和动态绑定。 所有虚函数必须都有定义。通常情况下,我们不使用某个函数,则无需为该函数提供定义。但是我们必须为每一个虚函数提供定义,而不管它是否被用到了,这是因为连编译器也无法确定到底会用哪个虚函数。多态虚函数表不能声明为虚函数的函数普通函数(非成员函数) 因为普通函数只能被重载overload,不能被override(覆盖),它在编译时确定。构造函数 虚函数的原创 2015-07-23 13:34:57 · 317 阅读 · 0 评论 -
define和内联函数
宏定义 宏替换是按定义替换成相应的常量表达式或字符闯,不会增加任何其他字符(如圆括号()等) #define NUM 5+7 p = NUM*NUM将会被替换成p = 5+7*5+7 所以宏定义仅仅是文本替换。宏定义与内联函数首先,为什么需要使用宏定义? 函数调用需要使用函数栈,需要一定的时间和空间的开销,影响其效率。 宏定义在预编译的地方将代码展开,不需要额外的时间和空间开销。宏原创 2015-07-21 11:25:47 · 810 阅读 · 0 评论 -
const
const变量 const变量有三种出现的位置 关键的一点是:const关键字的目的是说明变量不能被修改或更新,所以定义时必须初始化 1、全局const变量 在进程内存那篇文章我们说过,全局的只读变量(const)被放在代码段,也可以说是只读数据段const int i =0; const全局变量是一定要初始化的,否则会编译错误。初始化后,编译器在类型检查后直接用0在编译时替换。 con原创 2015-07-23 12:56:36 · 1166 阅读 · 0 评论 -
类的声明 类的作用域(To be Updated)
类的声明就像可以把函数的声明和定义分开一样,我们可以仅声明类而暂时不定义它。class Screen; 这种声明有时被称作为前向声明(forward declaration),在声明后定义前是不完全类型,就是说我们已经知道Screen是一个类类型,但是不清楚它包含了那些成员。不完全类型只能在非常有限的情况下使用:定义指向这种类型的指针或引用;声明(不能定义)以不完全原创 2015-05-03 16:00:48 · 490 阅读 · 0 评论 -
C++拷贝构造函数详解
一. 什么是拷贝构造函数首先对于普通类型的对象来说,它们之间的复制是很简单的,例如:[c-sharp] view plaincopyint a = 100; int b = a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。转载 2015-05-02 15:27:45 · 329 阅读 · 0 评论 -
函数重载、const形参、默认实参
重载同一个作用域内的几个函数名字相同但是形参列表不同,我们称之为重载(overload)不能定义两个函数除了返回类型外其他所用的要素都相同。重载和const形参默认实参调用含有默认实参的函数时,可以包含该实参,也可以省略该实参。注意,一旦某个形参被赋予了默认值,它后面的所有形参都必须有默认值。函数调用时,默认实参负责填补函数调用缺少的尾部实参(靠右侧原创 2015-04-30 15:20:11 · 592 阅读 · 0 评论 -
类的访问控制与封装
在c++语言中,我们使用访问控制符(access specifiers)加强类的封装性。public说明符之后的成员在整个程序内可被访问,定义为类的接口。private说明符之后的成员可以被类的成员函数访问,但是不能被使用该类的代码访问在类的成员函数内部,能够访问:当前对象的全部属性、函数;同类其他对象的全部属性、函数在类的成员函数以外的地方,只能够访问该类原创 2015-04-29 22:59:57 · 469 阅读 · 0 评论 -
宏与内联函数(面试常考)
第一部分:宏为什么要使用宏呢?因为函数的调用必须要将程序执行的顺序转移到函数所存放在内存中的某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方。这种转移操作要求在转去执行前要保存现场并记忆执行的地址,转回后要恢复现场,并按原来保存地址继续执行。因此,函数调用要有一定的时间和空间方面的开销,于是将影响其效率。而宏只是在预处理的地方把代码展开,不需要额外的空间和时间方面的开转载 2015-05-02 19:48:06 · 374 阅读 · 0 评论 -
C++ 初始化
初始值与初始化当一个对象在创建时获得了一个特定的值,我们说整个对象被初始化了(initialized)。初始化与赋值是两个完全不同的操作初始化是创建变量时赋予其一个初始值,而赋值的含义是把对象的当前值擦除了,而以一个新值来代替。默认初始化当变量没有被指定初始值时被默认初始化(default initialized)。默认值到底是什么,由变量的类型决定,同时定义变量的位置原创 2015-04-27 21:47:07 · 381 阅读 · 0 评论 -
类的拷贝、赋值和析构
拷贝初始化变量以及以值的方式传递或返回一个对象等。赋值使用赋值运算符。不定义时使用默认赋值操作。销毁当对象不存在时执行,比如一个局部对象会在创建它的的块结束时销毁,vector对象(数组)销毁时会销毁存储在其中的对象。管理动态内存的类通常不能依赖于合成的版本。如果类包含vector或者string成员,则其拷贝、赋值和销毁的合成版本能够正常使用。原创 2015-04-27 21:47:02 · 371 阅读 · 0 评论 -
类的构造函数
构造函数类通过一个或几个特殊的成员函数来控制其对象的初始化过程,这些函数叫做构造函数constructor。构造函数的任务是初始化类对象的数据成员,无论何时,只要类的对象被创建,就会执行构造函数。类通过一个特殊的构造函数来控制默认初始化过程,这个函数叫做默认构造函数default constructor。默认构造函数无须任何实参。如果我们的类没有显示的定义构造函数,那么编译器将原创 2015-04-26 21:13:13 · 479 阅读 · 0 评论 -
预编译处理
1.编译过程的简介: 预编译:a.处理所有的注释,以空格代替。b.将所有#define删除,并展开所有的宏定义,字符串替换。c.处理条件编译指令#if,#ifdef,#elif,#else,#endifd.处理#include,并展开被包含的文件,把头文件中的声明,全部拷贝到文件中。e.保留编译器需要使用的#pragma指令、gc转载 2015-05-02 16:43:53 · 801 阅读 · 0 评论