
C++
KevinIceFire
走在路上,跑起来。
展开
-
C++ 纯虚函数
C++纯虚函数 一、定义 纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法。在基类中实现纯虚函数的方法是在函数原型后加“=0” virtual void funtion()=0 二、引入原因 1、为了方便使用多态特性,我们常常需要在基类中定义虚拟函数。 2、在很多情况下,基类本身生成对象是不合情理的。例如,动物作为一转载 2013-08-06 15:59:59 · 492 阅读 · 0 评论 -
const 指针与指向const的指针
const 指针与指向const的指针当使用带有const的指针时其实有两种意思。一种指的是你不能修改指针本身的内容,另一种指的是你不能修改指针指向的内容。听起来有点混淆一会放个例子上来就明白了。 先说指向const的指针,它的意思是指针指向的内容是不能被修改的。它有两种写法。 const int* p; (推荐) int const*转载 2013-08-31 09:59:48 · 594 阅读 · 0 评论 -
链表操作(删除链表中的一个结点)
#includeusing namespace std;typedef struct node{ int number; struct node *next;}Node;Node *Delete(Node *head,int key){ Node *node1=head; Node *node2=NULL; if (head==NULL) {原创 2013-08-08 14:04:56 · 1687 阅读 · 0 评论 -
如何判断一个单链表中是否存在环
如何判断一个单链表是有环的?(注意不能用标志位,最多只能用两个额外指针)struct node { char val; node* next;} bool check(const node* head) {} //return false : 无环;true: 有环一种O(n)的办法就是(搞两个指针,一个每次递增一步,一个每次递增两步,如果有环的话两者必然重合,反之亦然): b原创 2013-09-01 09:30:46 · 852 阅读 · 0 评论 -
替换空格(从后往前依次替换的思想)
请实现一个函数,把字符串中每个空格替换为“%20”,例如输入“I love you",则输出”I%20love%20you"。void ReplaceBlank(char string[], int length){ if (string == NULL || length < 0) return; int originalLength = 0; int numberOfBlank原创 2013-09-01 11:04:05 · 855 阅读 · 0 评论 -
链表操作(从尾到头打印链表,使用栈结构实现)
void PrintListReverse(ListNode *pHead){ std::stack nodes; ListNode *pNode = pHead; while (pNode != NULL) { nodes.push(pNode); pNode = pNode->next; } while (!nodes.empty()) { pNode = node原创 2013-09-01 14:44:24 · 701 阅读 · 0 评论 -
二维数组中查找一个数
//二维数组中的查找,每一行都是按照从左到右递增的顺序排序,//从上到下也是按照递增的顺序排序,完成一个函数,输入的二维数组和一个整数,判断该整数是否在其中。bool Find2DElement(int *matrix, int rows, int columns, int number){ bool find = false; if (matrix != NULL && rows原创 2013-09-01 10:34:42 · 740 阅读 · 0 评论 -
String的构造函数,析构函数,复制构造函数,赋值运算符
class String{public: String(const char *str = NULL); String(const String &other); ~String(); String & operator= (const String &other);private: char *m_data;};String::String(const原创 2013-08-08 20:25:57 · 536 阅读 · 0 评论 -
二叉树的前序、中序、后序遍历的算法(递归形式和非递归形式)
//前序遍历非递归算法#define maxsize 100typedef struct { int value; Bitree *lchild; Bitree *rchild;}Bitree;typedef struct{ Bitree Elem[maxsize]; int top;}SqStack;void PreOrderUnrec(Bitree *t){原创 2013-09-01 16:31:21 · 622 阅读 · 0 评论 -
二分查找(C++)+递归和非递归算法
关于二分查找法二分查找法主要是解决在“一堆数中找出指定的数”这类问题。而想要应用二分查找法,这“一堆数”必须有一下特征:存储在数组中有序排列所以如果是用链表存储的,就无法在其上应用二分查找法了。(曽在面试被问二分查找法可以什么数据结构上使用:数组?链表?)至于是顺序递增排列还是递减排列,数组中是否存在相同的元素都不要紧。不过一般情况,我们还是希望并假原创 2013-08-31 17:09:14 · 16059 阅读 · 0 评论 -
链表操作(插入一个结点和删除一个结点)
struct ListNode { int value; struct ListNode *next;};void AddToTail(ListNode **pHead, int value){ ListNode *pNew = new ListNode; pNew->value = value; pNew->next = NULL; if (*pHead == NULL)原创 2013-09-01 14:29:52 · 1281 阅读 · 0 评论 -
重建二叉树
已知前序和中序遍历顺序构建二叉树的代码如下:BinaryTreeNode *Construct(int *preorder, int *inorder, int length){ if (preorder == NULL || inorder == NULL || length <= 0) return NULL; return ConstructCore(preorder, preor原创 2013-09-02 10:40:45 · 629 阅读 · 0 评论 -
atoi函数,字符串转换为整数
把字符串转换成整数题目:输入一个表示整数的字符串,把该字符串转换成整数并输出。例如输入字符串"345",则输出整数345。 分析:这道题尽管不是很难,学过C/C++语言一般都能实现基本功能,但不同程序员就这道题写出的代码有很大区别,可以说这道题能够很好地反应出程序员的思维和编程习惯,因此已经被包括微软在内的多家公司用作面试题。建议读者在往下看之前自己先编写代码,再比较自己写的代码和下面转载 2013-08-31 19:01:00 · 2045 阅读 · 0 评论 -
面试经典题目:链表中倒数第k个结点
方法一:看到这道题目,最直观的想法,就是先算出链表的长度n,然后倒数第k个结点就是顺序的第(n-k+1)个数,不过这样需要2次遍历链表,如果要求只能遍历链表一次,那么上述算法就不符合要求了。如果链表的结点数不多,这是一种很好的方法。但如果输入的链表的结点个数很多,有可能不能一次性把整个链表都从硬盘读入物理内存,那么遍历两遍意味着一个结点需要两次从硬盘读入到物理内存。我们知道把数据从硬盘原创 2013-08-31 22:50:24 · 607 阅读 · 0 评论 -
C++中public,protected,private
C++中public,protected,private访问[zz]第一:private, public, protected 访问标号的访问范围。private:只能由1.该类中的函数、2.其友元函数访问。不能被任何其他访问,该类的对象也不能访问。protected:可以被1.该类中的函数、2.子类的函数、以及3.其友元函数访问。但不能被该类的对象访问。pub转载 2013-09-20 22:41:31 · 663 阅读 · 0 评论 -
虚函数的实现机制
C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。关于虚函数的使用方法,我在这里不做过转载 2013-09-21 00:02:31 · 599 阅读 · 0 评论 -
友元函数和友元类
友元函数和友元类 采用类的机制后实现了数据的隐藏与封装,类的数据成员一般定义为私有成员,成员函数一般定义为公有的,依此提供类与外界间的通信接口。但是,有时需要定义一些函数,这些函数不是类的一部分,但又需要频繁地访问类的数据成员,这时可以将这些函数定义为该函数的友元函数。除了友元函数外,还有友元类,两者统称为友元。友元的作用是提高了程序的运行效率(即减少了类型检查和安全性检查等转载 2013-09-21 23:04:07 · 575 阅读 · 0 评论 -
C++中的static关键字
C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。一、面向过程设计中的static1、静态全局变量在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下:[cpp] view转载 2013-10-10 21:55:08 · 565 阅读 · 0 评论 -
面向对象(C++)
说到面向对象,大家第一反应应该就是它的三大特性:封装性、继承性和多态性。那么我们先简单的了解一下这三大特性: (1)封装性:封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。在C++中类中成员的属性有:public, protected, private,这三个属性的访问权限依次降低。 (2)转载 2013-08-25 09:55:57 · 715 阅读 · 0 评论 -
将“引用”作为函数返回值类型的格式、好处和需要遵守的规则?
格式:类型标识符 &函数名(形参列表及类型说明){ //函数体 }好处:在内存中不产生被返回值的副本;(注意:正是因为这点原因,所以返回一个局部变量的引用是不可取的。因为随着该局部变量生存期的结束,相应的引用也会失效,产生runtime error! 注意事项:(1)不能返回局部变量的引用。这条可以参照Effective C++[1]的Item 31。主要原因是局部变量会在函数返回后被销毁原创 2013-08-09 16:41:26 · 549 阅读 · 0 评论 -
C++继承详解
公有继承(public)、私有继承(private)、保护继承(protected)是常用的三种继承方式。1. 公有继承(public)公有继承的特点是基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有成员仍然是私有的,不能被这个派生类的子类所访问。2. 私有继承(private)私有继承的特点是基类的公有成员和保护成员都作为派生类的私有成员,并且不能被转载 2013-08-06 16:28:33 · 659 阅读 · 0 评论 -
C++拷贝构造函数(深拷贝,浅拷贝)
C++拷贝构造函数(深拷贝,浅拷贝)对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a=88;int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。#include iostream>using namespace std;class CExample {pri转载 2013-08-06 21:10:46 · 555 阅读 · 0 评论 -
C++成员函数的重载、覆盖与隐藏
成员函数的重载、覆盖(override)与隐藏很容易混淆,C++程序员必须要搞清楚概念,否则错误将防不胜防。成员函数被重载的特征:(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual关键字可有可无。覆盖:派生类函数覆盖基类函数,特征是:(1)不同的范围(分别位于派生类与基类);(2)函数名字相同;(3)参数相同;(4转载 2013-08-06 14:57:10 · 542 阅读 · 0 评论 -
引用和指针的区别
引用和指针的区别:1.引用在创建的同时必须初始化,即引用到一个有效的对象,而指针在定义的时候不必初始化,可以在定义后面的任何地方重新赋值2.不存在null引用,引用必须与合法的存储单元关联,而指针则可以为null3.引用一旦被初始化为指向一个对象,它就不能被改变为另一个对象的引用,而指针在任何时候都可以改变为指向另一个对象。给引用赋值并不是改变它和原始对象的绑定关系4.引用的创建和原创 2013-08-06 19:26:59 · 575 阅读 · 0 评论 -
static和const的用处
static的作用:const的作用:原创 2013-08-07 16:57:37 · 651 阅读 · 0 评论 -
C++中四种类型转换方式
C++中四种类型转换方式类型转换有c风格的,当然还有c++风格的。c风格的转换的格式很简单(TYPE)EXPRESSION,但是c风格的类型转换有不少的缺点,有的时候用c风格的转换是不合适的,因为它可以在任意类型之间转换,比如你可以把一个指向const对象的指针转换成指向非const对象的指针,把一个指向基类对象的指针转换成指向一个派生类对象的指针,这两种转换之间的差别是巨大的,但是传转载 2013-08-07 15:01:24 · 582 阅读 · 0 评论 -
构造函数初始化列表(C++)
C++中为什么构造函数初始化列表? 在以下三种情况下需要使用初始化成员列表:一,需要初始化的数据成员是对象的情况;二,需要初始化const修饰的类成员;三,需要初始化引用成员数据;需要初始化引用成员数据最近才发现C++可以定义引用类型的成员变量,引用类型的成员变量必须在构造函数的初始化列表中进行初始化。对于类成员是const修饰,或是引用类型的情况,是不允许赋值操作的,(显原创 2013-08-07 15:56:56 · 841 阅读 · 0 评论 -
const指针的两种形式
const 指针与指向const的指针当使用带有const的指针时其实有两种意思。一种指的是你不能修改指针本身的内容,另一种指的是你不能修改指针指向的内容。听起来有点混淆一会放个例子上来就明白了。 先说指向const的指针,它的意思是指针指向的内容是不能被修改的。它有两种写法。 const int* p; (推荐) int const* p转载 2013-08-08 09:23:18 · 684 阅读 · 0 评论 -
链表操作(将两个链表合并成一个链表依然有序,非递归方法和迭代方法)
Node *Merge(Node *head1, Node *head2){ Node *head = NULL; Node *temp = head; if (head1 == NULL) { return head2; } else if (head2 == NULL) { return head1; } if (head1->num num原创 2013-08-08 15:27:13 · 872 阅读 · 0 评论 -
链表操作(链表逆序)
Node *ReverseList(Node *head){ if (head == NULL || head->next == NULL) { return NULL; } Node *p1 = head; Node *p2 = p1->next; Node *p3 = p2->next; p1->next = NULL; while (p3 != NU原创 2013-08-08 14:35:43 · 675 阅读 · 0 评论 -
十进制数转化为二进制数
#include #include #include using namespace std;void fConvert(long n, vector& bit){ stack tempstack; long temp = n; while (temp != 1) { long temp1 = temp % 2; tempstack.push原创 2013-08-08 15:34:54 · 790 阅读 · 0 评论 -
把一个char组成的字符串循环右移n位
void LoopMove(char *pStr, int steps){ int n = strlen(pStr) - steps; char temp[MAX_LEN]; strcpy(temp, pStr + n); strcpy(temp + steps, pStr); *(temp + strlen(pStr)) = '\0'; strcpy(pStr, te原创 2013-08-08 16:51:53 · 1069 阅读 · 0 评论 -
strcpy函数
已知strcpy函数的原型是char* strcpy(char* strDest,const char* strSrc);1.不调用库函数,实现strcpy函数2.解释为什么要返回char*;1.strcpy的实现代码char* strcpy(char* strDest,const char* strSrc){ if((strDest == NULL) || (strS原创 2013-08-08 21:35:08 · 903 阅读 · 0 评论 -
atexit()函数
atexit()函数atexit 函数名: atexit 头文件:#include 功 能: 注册终止函数(即main执行结束后调用的函数) 用 法: int atexit(void (*func)(void)); 注意:按照ISO C的规定,一个进程可以登记多达32个函数,这些函数将由exit自动调用。atexit()注册的函数原创 2013-08-08 20:54:58 · 542 阅读 · 0 评论 -
写一个函数,找出一个整数数组中的第二大数
const int MINNUMBER = -32767;int find_sec_max(int data[], int count){ int maxnumber = data[0]; int sec_max = MINNUMBER; for (int i = 1; i < count; i++) { if (data[i] > maxnumber) {原创 2013-08-09 09:48:52 · 1178 阅读 · 0 评论 -
文件中有一组整数,要求排序后输出到另一个文件中
#include #include #include using namespace std;void Order(vector &data){ int count = data.size(); for (int i = 0; i < count; i++) { for (int j = 0; j < count - i - 1; j++) {原创 2013-08-09 09:38:10 · 883 阅读 · 0 评论 -
求一个十进制数转换为二进制数时包含1的个数
int fun(int x){ int count1 = 0; while (x) { count1++; x = x & (x - 1); } return count1;}原创 2013-08-09 10:04:32 · 785 阅读 · 0 评论 -
clapack.h(3592) : error C2144: syntax error : 'char ' should be preceded by ') '
转自:http://blog.sciencenet.cn/home.php?mod=space&uid=3199&do=blog&id=39165我从http://www.netlib.org/lapack/faq.html下载 lapack-pc-wfc.zip并且成功用watcom fortran编译出lapack.lib. 但是,当我试图将该库直接引用到我的C++工程转载 2014-02-24 09:57:50 · 1971 阅读 · 0 评论