2016-12-02    00:24:12

利用抽象数据类型实现Array;主要用C++模板实现数组类;体会一个完整的C++类的写法,能顺利写出来的人不多了,特别是对复制构造函数和重载= []运算,都需要扎实的基本攻。然后在测试程序中巧妙的实现了质数序列的输出,和一般的求质数方法有些不一样!

//#include "Array.h"
#include <stdio.h> const int DefaultSize = ; template <class Type>
class Array
{
private:
Type *elements; //数组存放的空间
int ArraySize; //当前长度
public:
Array(int Size = DefaultSize);
Array(const Array<Type>& x); //复制构造函数
~Array(){ delete[] elements; } Array<Type>& operator =(const Array<Type>& rhs); //数组复制
Type& operator [] (int i); //取元素值
int Length()const { return ArraySize; };
void ReSize(int sz);
}; template <class Type>
Array<Type>& Array<Type>::operator =(const Array<Type>& rhs)
{
int n = rhs.ArraySize; //取rhs的数组大小
if(ArraySize!=n)
{
delete[] elements;
elements = new Type[n]; //重新分配n个元素的内存
if (elements==NULL)
{
ArraySize = ;
cerr << "存储分配错误!" << endl;
exit();
}
ArraySize = n;
}
//从rhs向本对象复制元素
Type *destptr = elements;
Type *srcptr = rhs.elements;
while (n--)
{
*destptr++ = *srcptr++;
}
return *this;
} template <class Type>
Array<Type>::Array(int sz)
{
if (sz <= )
{
ArraySize = ;
cerr << "非法数组大小" << endl;
return;
}
elements = new Type[sz];
if (elements==NULL)
{
ArraySize = ;
cerr << "存储分配错误!" << endl;
exit();
}
ArraySize = sz;
} template <class Type>
Array<Type>::Array(const Array<Type>& x)
{
int n = x.ArraySize;
ArraySize = n;
elements = new Type[n];
if (elements== NULL)
{
ArraySize = ;
cerr << "存储分配错!"<<endl;
exit();
}
Type* srcptr = x.elements;
Type* destptr = elements;
while (n--)
{
*destptr++ = *srcptr++;
}
} template<class Type>
Type& Array<Type>::operator [] (int i)
{
if (i<||i>ArraySize-)
{
cerr << "数组下标超界" << endl;
exit();
}
return elements[i];
} template <class Type>
void Array<Type>::ReSize(int sz)
{
if (sz>=&&sz!=ArraySize)
{
Type *newArray = new Type[sz];
if (newArray==NULL)
{
cerr << "内存分配失败!" << endl;
return;
}
int n = (sz <= ArraySize) ? sz : ArraySize;// 按照新的大小确定传送数据的个数 Type *srcptr = elements;
Type *destptr = newArray;
while (n--)
{
*destptr++ = *srcptr++;
}
delete[] elements;
elements = newArray;
ArraySize = sz;
}
} #include <iostream>
#include <iomanip> using namespace std;
int main(int argc, char ** argv)
{
Array<int> A(); //数组输出质数序列
int n;
int primecount = , i, j; cout << "Enter a value>=2 as upper limit for prime numbers:";
cin >> n;
A[primecount++] = ; //2是质数
for (int i = ; i < n;i++)
{
if (primecount==A.Length())
{
A.ReSize(primecount + );
}
if (i%==) //偶数跳过
{
continue;
}
j = ;
while (j<=i/&&i%j!=)
{
j += ;
}
if (j>i/)
{
A[primecount++] = i;
}
} for (int i = ; i < primecount;i++)
{
cout << setw() << A[i];
if ((i+)%==)
{
cout << endl;
}
}
cout << endl; return ;
}

exit(0):正常运行程序并退出程序;

exit(1):非正常运行导致退出程序;

return():返回函数,若在主函数中,则会退出函数并返回一值。

详细说:

1. return返回函数值,是关键字; exit 是一个函数。

2. return是语言级别的,它表示了调用堆栈的返回;而exit是系统调用级别的,它表示了一个进程的结束。
3. return是函数的退出(返回);exit是进程的退出。

4. return是C语言提供的,exit是操作系统提供的(或者函数库中给出的)。exit是一个库函数,exit(1)表示发生错误后退出程序,exit(0)表示正常退出。在stdlib.h中exit函数是这样子定义的:void exit(int status)。这个系统调用是用来终止一个进程的,无论在程序中的什么位置,只要执行exit,进程就会从终止进程的运行。讲到exit这个系统调用,就要提及另外一个系统调用,_exit,_exit()函数位于unistd.h中,相比于exit(),_exit()函数的功能最为简单,直接终止进程的运行,释放其所使用的内存空间,并销毁在内存中的数据结构,而exit()在于在进程退出之前要检查文件的状态,将文件缓冲区中的内容写回文件。

5. return用于结束一个函数的执行,将函数的执行信息传出给其他调用函数使用;exit函数是退出应用程序,删除进程使用的内存空间,并将应用程序的一个状态返回给OS或其父进程,这个状态标识了应用程序的一些运行信息,这个信息和机器和操作系统有关,一般是 0 为正常退出, 非0 为非正常退出。

6. 非主函数中调用return和exit效果很明显,但是在main函数中调用return和exit的现象就很模糊,多数情况下现象都是一致的。

算法之美--2.2 Array的更多相关文章

  1. JavaScript 数据结构与算法之美 - 线性表(数组、栈、队列、链表)

    前言 基础知识就像是一座大楼的地基,它决定了我们的技术高度. 我们应该多掌握一些可移值的技术或者再过十几年应该都不会过时的技术,数据结构与算法就是其中之一. 栈.队列.链表.堆 是数据结构与算法中的基 ...

  2. JavaScript 数据结构与算法之美 - 十大经典排序算法汇总(图文并茂)

    1. 前言 算法为王. 想学好前端,先练好内功,内功不行,就算招式练的再花哨,终究成不了高手:只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 ...

  3. JavaScript 数据结构与算法之美 - 栈内存与堆内存 、浅拷贝与深拷贝

    前言 想写好前端,先练好内功. 栈内存与堆内存 .浅拷贝与深拷贝,可以说是前端程序员的内功,要知其然,知其所以然. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScri ...

  4. JavaScript 数据结构与算法之美 - 冒泡排序、插入排序、选择排序

    1. 前言 算法为王. 想学好前端,先练好内功,只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScript ,旨在入门数据结构与算 ...

  5. JavaScript 数据结构与算法之美 - 归并排序、快速排序、希尔排序、堆排序

    1. 前言 算法为王. 想学好前端,先练好内功,只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScript ,旨在入门数据结构与算 ...

  6. JavaScript 数据结构与算法之美 - 桶排序、计数排序、基数排序

    1. 前言 算法为王. 想学好前端,先练好内功,只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScript ,旨在入门数据结构与算 ...

  7. 【EatBook】-NO.2.EatBook.2.JavaArchitecture.1.001-《修炼Java开发技术在架构中体验设计模式和算法之美》-

    1.0.0 Summary Tittle:[EatBook]-NO.2.EatBook.2.JavaArchitecture.1.001-<修炼Java开发技术在架构中体验设计模式和算法之美&g ...

  8. 推荐学习《算法之美:指导工作与生活的算法》中文PDF+英文PDF

    我们所有人的生活都受到有限空间和有限时间的限制,因此常常面临一系列难以抉择的问题.在一天或者一生的时光里,哪些事是我们应该做的,哪些是应该放弃的?我们对杂乱无序的容忍底线是什么?新的活动与熟悉并喜爱的 ...

  9. JavaScript 数据结构与算法之美 - 非线性表中的树、堆是干嘛用的 ?其数据结构是怎样的 ?

    1. 前言 想学好前端,先练好内功,内功不行,就算招式练的再花哨,终究成不了高手. 非线性表(树.堆),可以说是前端程序员的内功,要知其然,知其所以然. 笔者写的 JavaScript 数据结构与算法 ...

随机推荐

  1. 《HTTP协议详解》读书笔记---请求篇之情求方法

    之前对于网络这一块不是很清楚,值知道TCP/IP协议,三次握手四次握手之类的很笼统,零碎的知识,现在打算系统学习下网络相关的知识,先从http协议开始. 本人,还是新手,对于一些知识如果有理解错误的, ...

  2. [python][django学习篇][5]选择数据库版本(默认SQLite3) 与操作数据库

    推荐学习博客:http://zmrenwu.com/post/6/ 选择数据库版本(SQLite3) 如果想选择MySQL等版本数据库,请先安装MySQL并且安装python mysql驱动,这里不做 ...

  3. Unity 碰撞检测

    武器与怪物的碰撞 目前来说有三种思路,其实前两种算变种了: 1.动画关键帧回调 + 范围检测.http://blog.csdn.net/u013700908/article/details/52888 ...

  4. codevs 1690 开关灯 线段树区间更新 区间查询Lazy

    题目描述 Description YYX家门前的街上有N(2<=N<=100000)盏路灯,在晚上六点之前,这些路灯全是关着的,六点之后,会有M(2<=m<=100000)个人 ...

  5. Codeforces Round #321 (Div. 2) B 二分+预处理

    B. Kefa and Company time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  6. 使用state改变的jsx监听不到数据变化的问题

    当使用state来改变一个组件内部的虚拟dom的时候,该虚拟dom是无法监听到state数据的变化的,他只会绑定state改变dom当时的数据.

  7. react中对props.children进行操作

    之前写的更多的时候是直接使用简写 {props.children} 这样就可以了,但是当有时候需要对传入的子组件进行一些操作的时候需要用到React.Children方法 {React.Childre ...

  8. cmp 指令

    (lldb) disassemble -n comp2 untitled6`comp2: 0x10d065f40 <+>: pushq %rbp 0x10d065f41 <+> ...

  9. RowFilter 对于已获取到的dataset进行过滤

    原文发布时间为:2009-11-12 -- 来源于本人的百度文章 [由搬家工具导入] DataView的属性RowFilter使用方法 p.s. 重点在于DataView是DateTable相关联的一 ...

  10. uml六种关系 【继实关聚组依】

    关联association,聚合aggregation,组合composition,依赖dependicy,继承generalization,实现relization powerdesigner从上往 ...