//编写一个数组类 MyVector,数组内容可以动态扩充,实现构造,析构,赋值操作符重载,插入,删除,获取元素个数,获取数组容量(不可以使用STL等的容器类,不能使用
//不连续的存储空间)
#include<iostream>
using namespace std;
class MyVector
{
public:
MyVector()
{
size=;
val=new int[count];
iterator=val;
start=val;
end=val;
Counts=count;
}
MyVector(int N)
{
size=;
N=N/count+;
val=new int[count*N];
iterator=val;
start=val;
end=val;
Counts=count*N;
}
~MyVector()
{
delete[] val;
}
MyVector & operator=(const MyVector & vec)
{
delete[] val;
val=vec->val;
size=vec->size;
Counts=vec->Counts;
start=vec->start;
end=vec->end;
}
void Insert(int num)
{
size++;
if(size>Counts)
{
Counts=Counts+count;
newval=new int[Counts];
for(int i=;i<size-;i++)
{
newval[i]=val[i];
}
delete(val);
val=newval;
start=val;
end=val+size-;
}
*end=num;
end++;
}
int Delete()
{
size--;
end--;
return *end;
}
int Size()
{
return size;
}
int Count()
{
return Counts;
}
int *val;
int *start;
int *end;
private:
static const int count=;
int Counts;
int *iterator;
int size;
int *newval;
}; int main()
{
MyVector* vec=new MyVector();// MyVector* vec=new MyVector(15);
MyVector* vec2=new MyVector;
int k;
for(int i=;i<;i++)
{
vec->Insert(i);
}
cout<<"插入前:";
for(int i=;i<vec->Size();i++)
{
cout<<vec->val[i]<<" ";
}
cout<<endl;
cout<<"起始值"<<*vec->start;
cout<<" ,结束值"<<*(vec->end-);
cout<<" ,数量"<<vec->Size();
cout<<" ,容量"<<vec->Count()<<endl; vec->Insert();
cout<<"插入后:";
for(int i=;i<vec->Size();i++)
{
cout<<vec->val[i]<<" ";
}
cout<<endl;
cout<<"起始值"<<*vec->start;
cout<<" ,结束值"<<*(vec->end-);
cout<<"数量"<<vec->Size();
cout<<"容量"<<vec->Count()<<endl; for(int i=;i<;i+=)
{
vec->Insert(i);
}
cout<<"插入后:";
for(int i=;i<vec->Size();i++)
{
cout<<vec->val[i]<<" ";
}
cout<<endl;
cout<<"起始值"<<*vec->start;
cout<<" ,结束值"<<*(vec->end-);
cout<<" ,数量"<<vec->Size();
cout<<" ,容量"<<vec->Count()<<endl;
k=vec->Delete();
cout<<"删除一个后:";
cout<<"起始值"<<*vec->start;
cout<<" ,结束值"<<*(vec->end-);
cout<<" ,数量"<<vec->Size();
cout<<" ,容量"<<vec->Count();
cout<<" ,删除的元素为:"<<k<<endl; vec2=vec;
cout<<"给别个赋值后:";
for(int i=;i<vec2->Size();i++)
{
cout<<vec2->val[i]<<" ";
}
cout<<endl;
cout<<"起始值"<<*vec2->start;
cout<<" ,结束值"<<*(vec2->end-);
cout<<"数量"<<vec2->Size();
cout<<"容量"<<vec2->Count();
cout<<endl; system("pause");
return ;
}

采用模板类编程为:

 //编写一个数组类 MyVector,数组内容可以动态扩充,实现构造,析构,赋值操作符重载,插入,删除,获取元素个数,获取数组容量(不可以使用STL等的容器类,不能使用
//不连续的存储空间)
#include<iostream>
using namespace std;
template<class T>
class MyVector
{
public:
MyVector()
{
size=;
val=new T[count];
iterator=val;
start=val;
end=val;
Counts=count;
}
MyVector(int N)
{
size=;
N=N/count+;
val=new int[count*N];
iterator=val;
start=val;
end=val;
Counts=count*N;
}
~MyVector()
{
delete[] val;
}
MyVector & operator=(const MyVector & vec)
{
delete[] val;
       val* = new T[vec.size()]; size=vec->size;
Counts=vec->Counts;
start=val;
end=val+vec.size();
}
void Insert(int num)
{
size++;
if(size>Counts)
{
Counts=Counts+count;
newval=new T[Counts];
for(int i=;i<size-;i++)
{
newval[i]=val[i];
}
delete(val);
val=newval;
start=val;
end=val+size-;
}
*end=num;
end++;
}
int Delete()
{
size--;
end--;
return *end;
}
int Size()
{
return size;
}
int Count()
{
return Counts;
}
T *val;
T *start;
T *end;
private:
static const int count=;
int Counts;
T *iterator;
int size;
T *newval;
}; int main()
{
MyVector<char>* vec=new MyVector<char>();// MyVector* vec=new MyVector(15);
MyVector<char>* vec2=new MyVector<char>;
char k;
for(int i=;i<;i++)
{
vec->Insert(i+);
}
cout<<"插入前:";
for(int i=;i<vec->Size();i++)
{
cout<<vec->val[i]<<" ";
}
cout<<endl;
cout<<"起始值"<<*vec->start;
cout<<" ,结束值"<<*(vec->end-);
cout<<" ,数量"<<vec->Size();
cout<<" ,容量"<<vec->Count()<<endl; vec->Insert('-');
cout<<"插入后:";
for(int i=;i<vec->Size();i++)
{
cout<<vec->val[i]<<" ";
}
cout<<endl;
cout<<"起始值"<<*vec->start;
cout<<" ,结束值"<<*(vec->end-);
cout<<"数量"<<vec->Size();
cout<<"容量"<<vec->Count()<<endl; for(int i=;i<;i++)
{
vec->Insert(i+);
}
cout<<"插入后:";
for(int i=;i<vec->Size();i++)
{
cout<<vec->val[i]<<" ";
}
cout<<endl;
cout<<"起始值"<<*vec->start;
cout<<" ,结束值"<<*(vec->end-);
cout<<" ,数量"<<vec->Size();
cout<<" ,容量"<<vec->Count()<<endl;
k=vec->Delete();
cout<<"删除一个后:";
cout<<"起始值"<<*vec->start;
cout<<" ,结束值"<<*(vec->end-);
cout<<" ,数量"<<vec->Size();
cout<<" ,容量"<<vec->Count();
cout<<" ,删除的元素为:"<<k<<endl; vec2=vec;
cout<<"给别个赋值后:";
for(int i=;i<vec2->Size();i++)
{
cout<<vec2->val[i]<<" ";
}
cout<<endl;
cout<<"起始值"<<*vec2->start;
cout<<" ,结束值"<<*(vec2->end-);
cout<<"数量"<<vec2->Size();
cout<<"容量"<<vec2->Count();
cout<<endl; system("pause");
return ;
}

val

2014金山笔试_编写一个数组类 MyVector的更多相关文章

  1. 22.编写一个类A,该类创建的对象可以调用方法showA输出小写的英文字母表。然后再编写一个A类的子类B,子类B创建的对象不仅可以调用方法showA输出小写的英文字母表,而且可以调用子类新增的方法showB输出大写的英文字母表。最后编写主类C,在主类的main方法 中测试类A与类B。

    22.编写一个类A,该类创建的对象可以调用方法showA输出小写的英文字母表.然后再编写一个A类的子类B,子类B创建的对象不仅可以调用方法showA输出小写的英文字母表,而且可以调用子类新增的方法sh ...

  2. java基础—继承题目:编写一个Animal类,具有属性:种类;具有功能:吃、睡。定义其子类Fish

    编写一个Animal类,具有属性:种类:具有功能:吃.睡.定义其子类Fish package zhongqiuzuoye; public class Animal { //属性 private Str ...

  3. 简单练习题2编写Java应用程序。首先定义一个描述银行账户的Account类,包括成员变 量“账号”和“存款余额”,成员方法有“存款”、“取款”和“余额查询”。其次, 编写一个主类,在主类中测试Account类的功能

    编写Java应用程序.首先定义一个描述银行账户的Account类,包括成员变 量“账号”和“存款余额”,成员方法有“存款”.“取款”和“余额查询”.其次, 编写一个主类,在主类中测试Account类的 ...

  4. 编写一个数组工具类, 编写本软件的 帮助文档(API文档)

    本文档是对静态成员的练习. 一. 建立一个ArrayTool(数组工具)的类,在此类中对传入数组进行一些操作(选最大值.先最小值.冒泡排正序.选择排反序.输出数组元素), 二. 建立一个Test的类, ...

  5. 2道acm编程题(2014):1.编写一个浏览器输入输出(hdu acm1088);2.encoding(hdu1020)

    //1088(参考博客:http://blog.csdn.net/libin56842/article/details/8950688)//1.编写一个浏览器输入输出(hdu acm1088)://思 ...

  6. Python自定义一个数组类,支持数组之间的四则运算和其他常见方法

    class MyArray: '''保证输入的内容是整型.浮点型''' def ___isNumber(self, num): if not isinstance(num, (int,float)): ...

  7. python关于类和正则表达( 编写一个程序(类))

    1.什么是类对象,实例对象 类对象:类名实例对象:类创建的对象 2.类属性: 就是类对象所拥有的属性,它被所有类对象的实例对象所共有,在内存中只存在一个副本.对于公有的类属性,在类外可以通过类对象和实 ...

  8. 【BigData】Java基础_创建一个订单类

    需求描述 定义一个类,描述订单信息订单id订单所属用户(用户对象)订单所包含的商品(不定数量个商品对象)订单总金额订单应付金额:    总金额500~1000,打折85折    总金额1000~150 ...

  9. 编写一个Car类,具有String类型的属性品牌,具有功能drive; 定义其子类Aodi和Benchi,具有属性:价格、型号;具有功能:变速; 定义主类E,在其main方法中分别创建Aodi和Benchi的对象并测试对象的特 性。

    package com.hanqi.test; public class Car { //构造一个汽车的属性 private String name; //创建getter和setter方法 publ ...

随机推荐

  1. NSString/NSMutable字符串——韩俊强…

    1.OC基本数据类型(简单铺垫) //   NSInteger  在64 位下相当于long,在非64位下相当于 int: //    CGFloat 在64位下相当于double  在非64位下相当 ...

  2. 阿里云服务器实战(一) : 在Linux下Tomcat7下使用连接池

    云服务器 的环境如下: Tomcat7+MySql5.6 一,如果自定义了程序的文件目录 , 下面的/alidata/xxx 就是自定义的目录 在Linux的Tomcat的server.xml里的Ho ...

  3. FSM之SMC使用总结

    FSM之SMC使用总结 Part1: Smc.jar state machine compiler usage Reference:     http://smc.sourceforge.net/   ...

  4. TCP的核心系列 — SACK和DSACK的实现(二)

    和18版本相比,37版本的SACK和DSACK的实现做了很多改进,最明显的就是需要遍历的次数少了, 减少了CPU的消耗.37版的性能提升了,代码有大幅度的改动,逻辑也更加复杂了. 本文主要内容:37版 ...

  5. C 打印格式小记

    转自:http://blog.csdn.net/fivedoumi/article/details/7077504 d,lx,ld,,lu,这几个都是输出32位的 hd,hx,hu,这几个都是输出16 ...

  6. HOW TO LINK THE TRANSACTION_SOURCE_ID TO TRANSACTION_SOURCE_TYPE_ID

    In this Document   Goal   Solution   References APPLIES TO: Oracle Inventory Management - Version 11 ...

  7. "《算法导论》之‘图’":单点最短路径(有向图)

    也许最直观的图处理问题就是你常常需要使用某种地图软件或者导航系统来获取从一个地方到另一个地方的路径.我们立即可以得到与之对应的图模型:顶点对应交叉路口,边对应公路,边的权重对应该路段的成本(时间或距离 ...

  8. Boyer-Moore算法

    1.概述 在用于查找子字符串的算法当中,BM(Boyer-Moore)算法是目前相当有效又容易理解的一种,一般情况下,比KMP算法快3-5倍. BM算法在移动模式串的时候是从左到右,而进行比较的时候是 ...

  9. StickyListHeaders的使用

    我们知道在ios中字母的导航有悬停的效果,在android中,git上有大神实现了这种悬停的功能,我们只要将普通的Listview改为StickyListHeadersListView然后设置adap ...

  10. mybatis ---- 实现数据的增删改查

    前面介绍了接口方式的编程,需要注意的是:在book.xml文件中,<mapper namespace="com.mybatis.dao.IBookDao"> ,命名空间 ...