前进C语言100-200素数
栈的概念栈是数据结构中一种特殊的线性表,它的基本特性是“先入后出,后入先出”。如下图:栈的基本操作栈有基本操作如下:void Push(const T& d);//入栈 void Pop();//出栈 T& Top();//返回栈顶元素 bool Empty();//判断是否为空栈 size_t Size();//栈中元素个数栈的实现Stac
我们都知道,实现auto_ptr有两种方法:第一种方法:在上一篇博客中我已经实现了,主要思想是管理权转移。第二种方法:它是我们c++标准库中以前的一个版本,主要思想是在auto_ptr类中除了有一个指针的成员变量以外还有一个bool类型的成员变量_owner。构造函数中将_owner设为真,表示对象是指针所指向的内存的拥有者,当要赋值时(ap1=ap2),将ap1的_owner置为true,ap2
我们知道c++标准库中定义了智能指针auto_ptr,但是我们很少用它,因为虽然它能够自动回收动态开辟的内存,不需要程序员自己去维护动态开辟的内存,但是当用它去赋值或者是拷贝构造时有一个管理权转移的过程,这样我们就不能很方便的使用auto_ptr。下面是简单的auto_ptr的实现,我们可以看到在复制和赋值时它将转移管理权。template<class T> class&n
#include<iostream> #include<string> using namespace std; template<typename T> struct Node { Node(const T& d) &nb
#include<iostream> #include<string> using namespace std; template<typename T> class SeqList { public: SeqList() &
c++中多态的实现我们都知道,c++中的多态是在虚函数的基础上实现的,用指向派生类的基类指针调用派生类(或基类)中自己的成员函数。那么,具体是怎么实现的呢?其实它是通过虚函数表来实现的,虚函数表是保存虚函数地址的一张表,若一个类中有虚函数,当程序运行时,编译器通过在虚函数表中查找相应的虚函数的地址来调用该函数。 对象的继承有如下几类:1.单一继承2.多重继承3.重复继承(钻石继承)4.虚
由于浅拷贝使多个对象共用一块内存地址,调用析构函数时导致一块内存被多次释放,导致程序奔溃。实现string类的时候通常显示的定义拷贝构造函数和运算符重载函数。 由于释放内存空间,开辟内存空间时花费时间,因此,在我们在不需要写,只是读的时候就可以不用新开辟内存空间,就用浅拷贝的方式创建对象,当我们需要写的时候才去新开辟内存空间。这种方法就是写时拷贝。 在构造函数中开辟新的空间时多
string的第一种实现方法:#include<iostream> using namespace std; class String { public: String(char *str="")//构造函数 :_s
在上一篇博客里我们知道了new[]和delete[]开辟空间和释放空间时过程,那么我们可不可以模拟实现一下它们的开辟内存和释放内存的过程呢?下面是我模拟new[]和delete[]的实现过程:根据上图我们可以模拟new[]和delete[]的操作过程#include<iostream> #include<stdlib.h> using namespace 
我们都知道在c++中可以用new/malloc动态分配内存空间用delete/free释放动态开辟的内存空间。c++中的malloc/free是继承c语言中的malloc/free,它的用法和在C语言中的用法一模一样。 1.那么既然c++中有了可以动态开辟内存的函数为什么又要有new/delete呢?我们知道malloc只是单纯的开辟内存空间而不进行初始化,free只是将动态开辟的内存空
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转,输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}是数组{1,2,3,4,5}的一个旋转,该数组的最小值为1。题目分析:我们可以通过旋转以后的数组中的元素的分布方式找出其中的一些规律:数组{3,4,5,1,2}中,最左边的数字(3)大于最右边的数字(2),由于原数组是递增排序的,所以左边的
题目:实现一个日期类,主要实现日期计算功能:日期+天数=日期;日期-天数=日期;日期-日期=天数;要实现该日期类,必须熟练掌握运算符重载的概念和实现方法。以下是编写的一个日期类: 头文件:#ifndef __DATE_H__ #define __DATE_H__ #include<iostream> using namespace st
主要是练习用运算符重载实现复数的一些基本运算,包括:复数加法(重载的运算符:+、+=、前置++、后置++);复数减法(重载的运算符:-、-=、前置--、后置--);复数乘法(重载的运算符:*、*=、);复数除法(重载的运算符:/、/=、);代码如下:#include<iostream> using namespace std; class Complex
问题1:判断两链表是否相交解题思路:分别遍历两个链表,到达链表末尾时判断两链表的节点是否相同,相同则两链表相交,否则不想交// 判断两个链表是否相交,假设两个链表都不带环。int CheckCross(pList list1, pList list2) { pLinkNode l1 = list1; pL
Copyright © 2005-2025 51CTO.COM 版权所有 京ICP证060544号