摘要:
大整数相乘是个被我们听烂了的经典算法题之一,解法各不同,今天在公司论坛上看到一个挺高端的算法思路,记录并分享下。如下图示例:999*99的计算方法。 上图是按照我们小学列算式做乘法的基本方法,但是不考虑进位,只是把算出的结果按相应的位置存放着。 以图所示为例,将计算结果依次存放在一个result数组中。第一轮存下3个81;第二轮从result数组的第二个元素开始存储,并且和该位置上原来的元素累加,依次计算到第二轮结束,如果有第三轮,还是这样的方式,result数组的第3个位置开始存储,并和之前的数字累加,bulabulabula,直到计算结束,会有个结果存放在result数组中。以本题为里,r 阅读全文
摘要:
今天在爱立信南京研发中心笔试碰到一个简答题为:delete p和delete[] p的区别,答的不好,下面从网上拷贝一篇文章,来具体说明。operator new和 operator delete函数有两个重载版本,每个版本支持相关的new表达式和delete表达式:void* operator new (size_t); // allocate an objectvoid* operator new [] (size_t); // allocate an array void operator delete (void*); // free an ojec... 阅读全文
摘要:
1.malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存2.对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。3.因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。4.C++程序经常要调用 阅读全文
摘要:
ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间; 在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符:1、插入器(<<) 向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout<<"Write Stdout"<<'\n';就表示把字符串"Write Stdout"和换行字符('\n')输出到标准输出流。2、析 阅读全文
摘要:
C++代码class String { public: String(const char *str = NULL);// 普通构造函数 String(const String &other); // 拷贝构造函数 ~ String(void); // 析构函数 String & operate =(const String &other);// 赋值函数 private: char *m_data;// 用于保存字符串 }; 请编写String的上述4个函数。C++代码//普通构造函数 String::String(const c... 阅读全文
摘要:
出现频率:★★★★类A派生B和C, 类D从B,C派生,如何将一个类A的指针指向一个类D的实例?解析:这道题实际上考查的是如何消除多重继承引起的向上继承二义性问题。程序代码如下所示: class A {}; class B : public A {}; class C : public A {}; class D : public B, public C {}; int main() { D d; A *pd = &d; //编译错误 ... 阅读全文
摘要:
在面向对象的C++语言中,虚函数(virtualfunction)是一个非常重要的概念。因为它充分体现 了面向对象思想中的继承和多态性这两大特性,在C++语言里应用极广。比如在微软的MFC类库中,你会发现很多函数都有virtual关键字,也就是说, 它们都是虚函数。难怪有人甚至称虚函数是C++语言的精髓。那么,什么是虚函数呢,我们先来看看微软的解释:虚函数是指一个类中你希望重载的成员函数,当你用一个基类指针或引用指向一个继承类对象的时候,你调用一个虚函数,实际调用的是继承类的版本。 ... 阅读全文
摘要:
此文转自:http://www.cnblogs.com/kingln/articles/1129114.html 从概念上讲。指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变。 而引用是一个别名,它在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用的对象在其整个生命周期中是不能被改变的(自始至终只能依附于同一个变量)。 在C++中,指针和引用经常用于函数的参数传递,然而,指针传递参数和引用传递参数是有本质上的不同的: 指针传递参数本质上是值传递的方式,它所传递的是一个地址... 阅读全文
摘要:
有个讨论帖比较精彩:http://www.chinaunix.net/jh/23/422544.html实现代码:#include <stdio.h>int max(int x,int y){ int buf[2]={x,y}; unsigned int z; z=x-y; printf("z=x-y=%u\n",z); z>>=31; printf("z>>=31=%u\n",z); //int z1; //z1 = x - y; //printf("z1=x-y=%u\n",z); //z1&g 阅读全文
摘要:
假设两个数x和y,则有:方法1,算术运算(加减):x=x+y; //x暂存两数之和y=x-y; //y为两数之和减去y,即原来的xx=x-y; //x为两数之和减去现在的y(原来的x),变成原来的y方法2,逻辑运算(异或):x^=y; //x先存x和y两者的信息y^=x; //保持x不变,利用x异或反转y的原始值使其等于x的原始值x^=y; //保持y不变,利用x异或反转y的原始值使其等于y的原始值关于异或运算要牢记两个原则:任何一位二进制数同 1 异或都会变成另外一个(0 同 1 异或的结果是 1,1 同 1 异或的结果是 0)任何一位二进制数同 0 异或都保持不变(0 同 0 异或的... 阅读全文