
C++
文章平均质量分 57
王伴农
就职于国内某知名互联网企业,网站后端开发
展开
-
C++ string类的简单实现
#include #include using namespace std;class String{public: String(const char* str = NULL); String(const String &other); String & operator=(const String &other); ~String();protected:privat原创 2014-10-14 20:19:17 · 1000 阅读 · 0 评论 -
百度电面题 C和C++ 语言动态内存分配 的区别
一、C语言动态内存分配 要实现动态内存的分配,除了利用含指针成员的结构体之外,还需利用C语言提供的几个标准库函数。(使用时应包含头文件“alloc.h”或“malloc.h”或“stdlib.h”) 1.malloc函数 函数原型为void *malloc(unsigned int size);在内存的动态存储区中分配一块长度为"size" 字节的连续区域。函数的返回值为原创 2014-04-03 00:41:12 · 942 阅读 · 0 评论 -
用C++ DIY自己的线性存储的线性表
用C++ DIY自己的线性存储的线性表原创 2014-03-22 16:37:03 · 1786 阅读 · 0 评论 -
new和delete
一 数组和new 数组类型变量三个重要限制:1 数组长度不变2 在编译时必须知道其长度3 数组只在定义它的块语句内存在突破数组的限制针对2 需要在运行时动态的分配数组针对3 动态分配的数组一直存在,直到程序显示释放它 自由存储区:又叫做堆。每一个程序在执行时都占用一块可用的内存空间,用于存放动态分配的对象,此内存空间称为程序的自由存储区或堆。C语言使用一转载 2014-03-22 14:28:56 · 642 阅读 · 0 评论 -
基于C++类和指针实现二叉树
1、二叉树的定义 二叉树(Binary Tree)是一种特殊的树型结构,每个节点至多有两棵子树,且二叉树的子树有左右之分,次序不能颠倒。 由定义可知,二叉树中不存在度(结点拥有的子树数目)大于2的节点。二叉树形状如下下图所示:2、二叉树的性质(1)在二叉树中的第i层上至多有2^(i-1)个结点(i>=1)。备注:^表示此方(2)深度为k的二叉树至多有2^k-1个节点(k>=原创 2014-03-21 10:10:11 · 14178 阅读 · 2 评论 -
百度最新面试题集锦
转载请标明出处,原文地址:http://blog.youkuaiyun.com/hackbuteer1/article/details/73489681、实现一个函数,对一个正整数n,算得到1需要的最少操作次数。操作规则为:如果n为偶数,将其除以2;如果n为奇数,可以加1或减1;一直处理下去。例子:func(7) = 4,可以证明最少需要4次运算n = 7n-1 6n/2 3n转载 2014-04-16 10:40:53 · 721 阅读 · 0 评论 -
C++中返回指向函数的指针学习
int *p() 定义一个函数,该函数返回一个指向整型元素的指针变量 int (*p)() 指向函数的指针,该函数返回一个整型值在C++ primer 238页中出现的int(*ff(int))(int*,int) ,解释为:ff(int)是一个函数,带有一个int型的形参,所以,这个首先是一个函数。如下面例子中的int (*funOne(int number))(int原创 2014-03-18 16:20:35 · 1913 阅读 · 0 评论 -
typedef和const pointer定义
假设以下语句Typedef string *ptr;Const ptr cstr;很多人都认为cstr的真实类型是Const string *cstr,但这是错误的。#include #include using namespace std;int main(){ string s("hello world"); string s1("you can not poi原创 2014-03-18 14:58:13 · 823 阅读 · 0 评论 -
typedef和常量指针
假设以下语句Typedef string *ptr;Const ptr cstr;很多人都认为cstr的真实类型是str,但这是错误的。Const string *c#include #include using namespace std;int main(){ string s("hello world"); string s1("you can not point原创 2014-03-18 14:50:57 · 757 阅读 · 0 评论 -
堆和栈的区别
堆和栈的区别 (转贴) 非本人作也!因非常经典,所以收归旗下,与众人阅之!原作者不祥!堆和栈的区别一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由转载 2014-03-29 10:30:27 · 671 阅读 · 0 评论 -
进程和线程的区别
简而言之,一个程序至少有一个进程,一个进程至少有一个线程. 线程的划分尺度小于进程,使得多线程程序的并发性高。另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。从逻转载 2014-04-03 00:53:14 · 950 阅读 · 0 评论 -
线性表的链式存储及其接口函数C++类实现
线性表的链式存储及其接口函数C++类实现原创 2014-03-23 20:00:38 · 1795 阅读 · 0 评论 -
求100的阶乘结果后面有多少个0(百度面试题)
这个题最简单的办法就是对每个乘数原创 2014-09-29 10:55:20 · 5835 阅读 · 0 评论 -
《Effective C++》读书笔记
第一章:让自己习惯C++1、视C++为一个语言联邦a、C++由四个部分组成: C、Object-Oriented C++、Template C++、 STL。b、每一个部分有自己独立的高效编程守则2、用const、enum、inline代替#definea、#define是预处理器处理的部分,当编译出错时,不容易发现错误发生在哪里,其次由于预处理器盲目的替换,会导致目标码的增大转载 2014-03-04 13:47:54 · 595 阅读 · 0 评论 -
详细介绍=====c++中的引用与指针的区别
c++中的引用与指针的区别 ★ 相同点: 1. 都是地址的概念; 指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。 ★ 区别: 1. 指针是一个实体,而引用仅是个别名; 2. 引用使用时无需解引用(*),指针需要解引用; 3. 引用只能在定义时被初始化一次,之后不可变;指针可变; 引用“从一而终” ^转载 2014-04-11 16:13:34 · 634 阅读 · 0 评论 -
最大堆/最小堆
堆的定义是:n个元素的序列{k1,k2,…,kn},当且仅当满足如下关系时被成为堆 (1)Ki 2i 且 ki 2i-1 或 (2) Ki >= k2i 且 ki >= k2i-1 (i = 1,2,…[n/2])当满足(1)时,为最小堆,当满足(2)时,为最大堆。 若将此序列对应的一维数组堪称是一个完全二叉树,则2i和2i转载 2014-04-25 09:31:50 · 939 阅读 · 0 评论 -
大数据量,海量数据 处理方法总结
1.Bloom filter适用范围:可以用来实现数据字典,进行数据的判重,或者集合求交集基本原理及要点:对于原理来说很简单,位数组+k个独立hash函数。将hash函数对应的值的位数组置1,查找时如果发现所有hash函数对应位都是1说明存在,很明显这个过程并不保证查找的结果是100%正确的。同时也不支持删除一个已经插入的关键字,因为该关键字对应的位会牵动到其他的关转载 2014-04-25 09:22:24 · 751 阅读 · 0 评论 -
用双链表封装的栈的实现
上一篇文章http://blog.youkuaiyun.com/hongkangwl/article/details/22286469中用C++实现了双向链表了,下面我们对其封装,得到栈~~、我们用链表的插入和删除模仿pop和push完整代码如下:#include using namespace std;struct node { int date; node* prev; nod原创 2014-03-27 14:34:13 · 947 阅读 · 0 评论 -
写的很好 链表的各种题目整理(C语言实现)
这里处理的全部是单链表:typedef struct node { char *data; struct node *next; } node_t;我们约定一个打印链表的函数:void list_display(node_t *head){ for (; head; head = head->next) printf("%s转载 2014-04-03 21:25:13 · 8072 阅读 · 0 评论 -
用C++的类和结构体DIY静态链表及其接口函数
用C++的类和结构体DIY静态链表原创 2014-03-23 19:37:20 · 1207 阅读 · 0 评论 -
华为入职前测试:大数相乘
华为入职前测试:大数相乘原创 2014-03-19 11:56:14 · 1973 阅读 · 0 评论 -
ACM 9的余数
除以9,能整除的数,有个特点,就是数位相加,还能被9整除,或数位相加结果再相加,一直能最后得到9.如:6255,6+2+5+5=18,1+8=9或:62+55=117,1+1+7=9或625+5=630,6+3+0=9所以原式求和:1+2+3+4+5+6......+1998+1999=(1+1999)*2000/2=2000000数位相加为2,比9小7,所以+7可被9整除原创 2014-03-19 17:13:17 · 1299 阅读 · 0 评论 -
继承的构造与析构
继承的构造与析构原创 2013-12-31 09:40:35 · 1016 阅读 · 1 评论 -
C++复制构造函数和拷贝构造函数
1 拷贝构造函数参数的特点赋值构造函数要申请内存。就像一般的构造函数一样。而赋值操作,是已经申请好了内存。只是赋值。对于一个类X,如果一个构造函数的第一个参数是下列之一:a) X&b) const X&c) volatile X&d) const volatile X&因此 X::X(X&, int=1); //是拷贝构造函数 并且类中可以存在超过一个拷原创 2014-03-04 14:53:03 · 6044 阅读 · 0 评论 -
default constructor 的构造函数
里总结了如下四种情况:1.如果类内部有成员对象,并且成员对象带有默认构造函数,那么编译器有必要为这个类合成默认构造函数,以初始化这些成员对象。并且成员对象初始化的顺序是按他们在类中声明的顺序。例:class BlackBall {public: BlackBall(){ cout << "BlackBall()"<< endl; }};class RedBall原创 2014-02-18 15:11:14 · 1162 阅读 · 0 评论 -
C++的操作符重载
重载操作符就是让操作符作用域非内置类型时也有自己独特的意义。对于内置类型,当操作符作用于它们时,编译器会规定操作的意义:两个int型数据相加的结果与数学运算的加法相同。但是对于非内置类型,比如类或者枚举类型,编译器并没有规定操作符作用于它们的意义。有些时候,这样做是合理的,比如对于两个Student类对象(其中的数据成员有姓名、学号),对它们进行加法操作的确没有什么意义;但是有的时候,我们却希原创 2014-02-28 16:28:17 · 1135 阅读 · 0 评论 -
C++单态类声明
在诸多面试过程中,单态类是非常常见的一个问题。所谓单态类即仅能定义一个对象的类,其遵循设计模式中的单态模式。实际上,单态类在Java中是非常常见的,以下为C++单态类声明,其中NULL为空指针宏定义。[cpp] view plaincopyclass Singleton { public: static Singleton* GetInstance(voi转载 2014-02-25 14:18:48 · 910 阅读 · 0 评论 -
strcpy和memcpy的标准实现
strcpy和memcpy都是标准C库函数,它们有下面的特点。strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。已知strcpy函数的原型是:char* strcpy(char* dest, const char* src);memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广。原创 2014-01-17 16:27:55 · 637 阅读 · 0 评论 -
VC中double、long、unsigned、int、char类型数据所占字节数
和机器字长及编译器有关系:所以,int,long int,short int的宽度都可能随编译器而异。但有几条铁定的原则(ANSI/ISO制订的): 1 sizeof(short int)<=sizeof(int) 2 sizeof(int)<=sizeof(long int) 3 short int至少应为16位(2字节) 4 long int至少应为32位。 unsigned 是原创 2014-01-03 09:56:12 · 10286 阅读 · 0 评论 -
C和C++中static的作用
C和C++中static的作用原创 2013-12-09 16:40:35 · 640 阅读 · 0 评论 -
C++中的 public和private以及protected派生类继承问题和访问权限问题
第一:private, public, protected 访问标号的访问范围。private:只能由1.该类中的函数、2.其友元函数访问。不能被任何其他访问,该类的对象也不能访问。protected:可以被1.该类中的函数、2.子类的函数、以及3.其友元函数访问。但不能被该类的对象访问。public:可以被1.该类中的函数、2.子类的函数、3.其友元函数访问,也可以由原创 2013-12-30 20:54:07 · 1608 阅读 · 0 评论 -
常量指针与指针常量的区别(转帖)
三个名词虽然非常绕嘴,不过说的非常准确。用中国话的语义分析就可以很方便地把三个概念区分开。一) 常量指针。常量是形容词,指针是名词,以指针为中心的一个偏正结构短语。这样看,常量指针本质是指针,常量修饰它,表示这个指针乃是一个指向常量的指针(变量)。指针指向的对象是常量,那么这个对象不能被更改。在C/C++中,常量指针是这样声明的:1)const int *p;2)int c转载 2013-12-28 22:25:59 · 740 阅读 · 0 评论 -
[华为机试题]最大连续递增子串
#include #include #include using namespace std;int main(){ string s; string::size_type length(0); cin>>s; string::size_type num = s.size(); vector ss, ss1; ss.clear(); ss1.clear();原创 2014-03-11 09:48:13 · 764 阅读 · 0 评论 -
Linux中环境变量文件及配置
一、环境变量文件介绍转自:http://blog.youkuaiyun.com/cscmaker/article/details/7261921Linux中环境变量包括系统级和用户级,系统级的环境变量是每个登录到系统的用户都要读取的系统变量,而用户级的环境变量则是该用户使用系统时加载的环境变量。所以管理环境变量的文件也分为系统级和用户级的,下面贴一个网上找到的讲的比较明白的文件介绍(略作修改)[1原创 2014-03-07 08:51:26 · 1261 阅读 · 0 评论 -
stcuct和class的区别
1struct的成员默认权限是public,而class的成员默认权限是private。#include int main(){ class A { public: int a; }; struct B { public: int a; }; A A1; B B1; B1.a = 0; A1.a = 0; return原创 2014-03-17 20:57:21 · 868 阅读 · 0 评论 -
双向链表的C++实现
转载注明出处http://blog.youkuaiyun.com/hongkangwl/article/details/22286469首先定义节点的结构struct node { int date; node* prev; node* next;};老样子,建立双链表的类class doublelink{public: int doublelink_in原创 2014-03-27 14:26:01 · 19952 阅读 · 1 评论 -
UML类图关系大全
1、关联双向关联:C1-C2:指双方都知道对方的存在,都可以调用对方的公共属性和方法。在GOF的设计模式书上是这样描述的:虽然在分析阶段这种关系是适用的,但我们觉得它对于描述设计模式内的类关系来说显得太抽象了,因为在设计阶段关联关系必须被映射为对象引用或指针。对象引用本身就是有向的,更适合表达我们所讨论的那种关系。所以这种关系在设计的时候比较少用到,关联一般都是有向的。转载 2014-03-17 20:10:23 · 642 阅读 · 0 评论 -
循环链表及其接口函数的C++实现
转载请注明出处:http://blog.youkuaiyun.com/hongkangwl/article/details/22284249首先建立节点的结构体struct node{ int date; node* ptrnext;};然后在循环链表的类中声明需要的成员和方法class circlelinklist{private: int le原创 2014-03-27 14:01:28 · 1486 阅读 · 0 评论 -
中缀表达式转后缀表达式C++代码
[cpp] view plaincopy//MyStack.h #include using namespace std; template class ElemType> class MyStack { public: const static int MAXSIZE =100; ElemType data[MAXSIZE];转载 2014-03-27 15:20:06 · 1513 阅读 · 0 评论 -
linux下的C++编程
第一步,要安装C++的编译器g++使用如下命令:root@wl-MS-7673:/home/wl/桌面/c++# apt-get install g++第二步,开始我们的hello world使用Vim建立helloworld.cpp,输入如下:root@wl-MS-7673:/home/wl/桌面/c++# cat helloworld.cpp #inclu原创 2014-03-16 15:59:20 · 4495 阅读 · 0 评论