C++
风空
无间路上,做最真实的自己
展开
-
动态规划
Given a string s, partition s such that every substring of the partition is a palindrome. Return the minimum cuts needed for a palindrome partitioning of s. For example, given s ="aab", Return1翻译 2016-05-10 22:02:47 · 330 阅读 · 0 评论 -
输入一个数组(M,N),只可以想右边下边走,从(1,1)到(M,N)经过的最大数字和
#include#includeusing namespace std;vector >A;int N,M;int max(int i,int j){return i>j?i:j;}int dfs(int i,int j){if(i==N||j==M) return 0;else if(i==N-1&&j==M-1)retur原创 2016-05-01 21:18:06 · 527 阅读 · 0 评论 -
C++11一些新特性
1.auto关键字,推断变量的类型。2.decltype,用于在编译器推断出表达式的类型。3.对于模板的改进,识别2个连续的>>括号。4.列表初始化,C++11 中的stl可以和未指定长度数组一样的初始化功能5.function函数包装,bing绑定函数6.lambda表达式1.右值引用T&&V;2.move语意原创 2016-05-01 21:25:11 · 252 阅读 · 0 评论 -
C++ 内存泄露
C++内存泄露主要发生在浅拷贝阶段:例如#include#include#include#includeusing namespace std;class A{private: char *m; size_t n;public: A(size_t n=1) { cout<<"i want to creat it"<<endl; m=new char[n];原创 2016-05-02 17:36:24 · 428 阅读 · 0 评论 -
C++11 多线程编程
1.利用C++11线程函数创建线程,#include#includeusing namespace std;void fun(int i){ cout<<"i="<<i<<endl;}int main(){ for(int i=0;i<4;i++) { thread t(fun,i);//创建线程函数,参数为函数地址,与函数参数。对原创 2016-05-03 12:16:35 · 369 阅读 · 0 评论 -
C++11 多线程编程---条件变量
C++11条件变量condition_variable配合mutex操作,利用mutex在保持互斥,利用条件变量的wait与notify函数来保持线程的等待与互斥。上代码:#include #include#include#include#includeusing namespace std;class A{public: bool isfull()const{ r原创 2016-05-04 15:56:29 · 519 阅读 · 0 评论 -
C++11 多线程编程 原子变量
利用atomic关键字,来控制变量在多线程中的同步。代码是学习语言最好的方式,上代码:#include #include#include#include#includeusing namespace std;void fun(atomic&counter){ for(int i=0;i<100;i++) { ++counter;原创 2016-05-04 16:25:48 · 939 阅读 · 0 评论 -
C++11多线程编程 call_once
call_once 可以使他所修饰的函数在多线程环境中只执行一次,call_once((once_falg)x,y),他接受一个once_falg变量参数,另一个参数可以使函数,lambda表达式等。上代码:#include #include#includeusing namespace std;once_flag t;void fun1(){ cout<<"i an原创 2016-05-04 16:48:18 · 381 阅读 · 0 评论 -
中介者模式
中介者模式:如果设计的类之间不彼此直接通信,就可以用中介者模式,可以降低类与类之间的耦合。1.首先有n个基础功能类,这些类依靠中介者彼此通信,所以,这些基础功能类与中介者是依赖关系,具体类后者基础功能类的基类有中介者对象。2.首先有一个抽象的中介者,作为基类。3.有一个具体的抽象者,由于基础功能类的通信依靠中介者,所以中介者必须认识所有的基础功能类,所以中介者与基础功能类是聚合关系。原创 2016-05-04 17:00:12 · 301 阅读 · 0 评论 -
经典递归
Given a string s and a dictionary of words dict, add spaces ins to construct a sentence where each word is a valid dictionary word. Return all such possible sentences. For example, givens ="ca翻译 2016-05-04 22:42:53 · 331 阅读 · 0 评论 -
Linux Socket编程(不限Linux)
Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect、accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。可是使用Select就可以完成非阻塞(所谓非阻塞方式转载 2016-07-29 16:15:12 · 286 阅读 · 0 评论 -
C++ new内存分配
1.C++标准对内存分配失败有明确的规定,调用new_handel()函数会有:1.用new分配给多的内存,2.抛出bad_alloc异常3.调用exit退出上代码:#include#include#include#includeusing namespace std;char *gPool=NULL;void my_new_handler();int mai原创 2016-05-01 21:13:19 · 497 阅读 · 0 评论 -
C++多态的本质
1.编译器能否识别多态,看是否有virtual关键字,如果有,那么在声明对象的时候,内存会分配一个vptr关键字和一个vptb表,其中vptr指向vptb表。现在我们谈谈单继承的情况:假定某一个虚函数f(),放在vptb的slot(2)中,一个虚函数g()凡在slot(3)中,当基类声明了一个虚函数,并且有子类继承基类的时候会出现二种情况:1.基类的虚函数f()被子类重写,此时,子原创 2016-04-05 12:54:13 · 1004 阅读 · 0 评论 -
C++底层技术---操作系统的内存管理
操作系统的内存管理有几个原则1.进程私有2.基于页3.4GB大小操作系统分配主要有2个步骤1.预留2.提交进程的虚拟地址空间的页有三种状态:自由,预留,和提交预留的作用是针对频繁请求内存代码的,导致申请的地址空间不连续而增加的。一般的过程是自由---》预留------》提交预留只是从地址空间划分一部分给程序,而得到真正的物理存储空间是在提交阶段原创 2016-04-30 23:10:40 · 325 阅读 · 0 评论 -
C++ 拷贝构造函数 赋值构造函数
拷贝构造函数和赋值构造函数的异同由于并非所有的对象都会使用拷贝构造函数和赋值函数,程序员可能对这两个函数有些轻视。请先记住以下的警告,在阅读正文时就会多心:如果不主动编写拷贝构造函数和赋值函数,编译器将以“位拷贝”的方式自动生成缺省的函数。倘若类中含有指针变量,那么这两个缺省的函数就隐含了错误。以类String 的两个对象a,b 为例,假设a.m_data 的内容为“hello”,b.m_da转载 2016-04-26 18:03:19 · 305 阅读 · 0 评论 -
C++性能的优化
对于每一个程序员来说,程序的运行效率都是一个值得重视,并为之付出努力的问题。但是程序性能的优化也是一门复杂的学问,需要很多的知识,然而并不是每个程序员都具备这样的知识,而且论述如何优化程序提高程序运行效率的书籍也很少。但是这并不等于我们可以忽略程序的运行效率,下面就介绍一下本人积累的一些简单实用的提高程序运行效率的方法,希望对大家有所帮助。一、尽量减少值传递,多用引用来传递参数。至于其中的转载 2016-04-15 21:04:41 · 918 阅读 · 0 评论 -
C++临时对象
C++中有这样一种对象:它在代码中看不到,但是确实存在。它就是临时对象---由编译器定义的一个没有命名的非堆对象(non-heap object)。为什么研究临时对象?主要是为了提高程序的性能以及效率,因为临时对象的构造与析构对系统性能而言绝不是微小的影响,所以我们应该去了解它们,知道它们如何造成,从而尽可能去避免它们。临时对象通常产生于以下4种情况:类型装换按值传转载 2016-04-06 16:28:00 · 293 阅读 · 0 评论 -
STL源码-内存的分配
1.对于STL,编译器帮我做了很多东西,例如配置内存与释放内存a.首先在STL源码里面,利用allocate函数来分配内存,T *tmp=(T*)(new (sizeof(T)*size)t));new(P)T1(value)意思是在p所指的内存里面构造T1这个对象。b.对于destory函数而言,编译器也帮助我们释放了对象;ptr->~T();对于new与destory而言其原创 2016-04-13 21:33:46 · 232 阅读 · 0 评论 -
STL源码----容器与算法
(A)vector有三个成员变量 start,finish,end_of_storage。1.对于vvector里面最重要的函数push_back会调用insert_aux()主要会做2件事a.判断空间是否足够(end_of_storage);如果不够1.会开辟2倍的内存空间,然后将以前的数据copy到新的内存空间2.会destory掉原来的内存空间在开辟与destroy的原创 2016-04-13 22:00:52 · 281 阅读 · 0 评论 -
深度探索C++对象模型(3)
对于数据成员的存取,编译器在继承的情况下的一些说明: 1.多继承: 例如class A{int a;};class B:{int b}class C:public A,public B{}B *p;C c;p=&a;编译器会在内部需要一些转化: p=(B*)((char *)&c)+sizeof(A);2,菱形继承:class A{int a;};class B原创 2016-04-03 14:48:57 · 477 阅读 · 0 评论 -
深度探索C++对象模型(2)
在C++中,类的成员变量有静态变量与非静态变量之分,例如class A{public:static int x;int y;};1.对于x的存取,pt->x 与 A::x其实形式是一样的,只是文法上的不同。2.对于y的存取,A a; a.y在编译器内部其实是&a+y在对象a内的偏移地址。原创 2016-04-02 21:28:42 · 243 阅读 · 0 评论 -
深度探索C++对象模型(1)
编译器会自动给我带来许多优化:例如:#includeusing namespace std;class A{public:static int x;};class B:virtual public A{};class C:virtual public A{};class D:public B,public C{原创 2016-04-02 21:04:22 · 470 阅读 · 0 评论 -
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {pub翻译 2016-04-02 17:21:25 · 4236 阅读 · 0 评论 -
请实现一个函数,将一个字符串中的空格替换成“ ”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We Are Happy。
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。class Solution {public:void replaceSpace(char *str,int length) { if(length原创 2016-04-02 16:26:51 · 346 阅读 · 0 评论 -
高级语言的编译:链接及装载过程介绍
###引言随着越来越多功能强大的高级语言的出现,在服务器计算能力不是瓶颈的条件下,很多同学会选择开发效率高,功能强大的虚拟机支持的高级语言(Java),或者脚本语言(Python,Php)作为实现功能的首选,而不会选择开发效率低,而运行效率高的 C/C++ 作为开发语言。而这些语言一般情况下是运行在虚拟机或者解释器中,而不需要直接跟操作系统直接打交道。虚拟机和解释器相当于为高级语言或者转载 2016-08-12 11:15:49 · 595 阅读 · 0 评论