2014金山笔试_编写一个数组类 MyVector
//编写一个数组类 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的更多相关文章
- 22.编写一个类A,该类创建的对象可以调用方法showA输出小写的英文字母表。然后再编写一个A类的子类B,子类B创建的对象不仅可以调用方法showA输出小写的英文字母表,而且可以调用子类新增的方法showB输出大写的英文字母表。最后编写主类C,在主类的main方法 中测试类A与类B。
22.编写一个类A,该类创建的对象可以调用方法showA输出小写的英文字母表.然后再编写一个A类的子类B,子类B创建的对象不仅可以调用方法showA输出小写的英文字母表,而且可以调用子类新增的方法sh ...
- java基础—继承题目:编写一个Animal类,具有属性:种类;具有功能:吃、睡。定义其子类Fish
编写一个Animal类,具有属性:种类:具有功能:吃.睡.定义其子类Fish package zhongqiuzuoye; public class Animal { //属性 private Str ...
- 简单练习题2编写Java应用程序。首先定义一个描述银行账户的Account类,包括成员变 量“账号”和“存款余额”,成员方法有“存款”、“取款”和“余额查询”。其次, 编写一个主类,在主类中测试Account类的功能
编写Java应用程序.首先定义一个描述银行账户的Account类,包括成员变 量“账号”和“存款余额”,成员方法有“存款”.“取款”和“余额查询”.其次, 编写一个主类,在主类中测试Account类的 ...
- 编写一个数组工具类, 编写本软件的 帮助文档(API文档)
本文档是对静态成员的练习. 一. 建立一个ArrayTool(数组工具)的类,在此类中对传入数组进行一些操作(选最大值.先最小值.冒泡排正序.选择排反序.输出数组元素), 二. 建立一个Test的类, ...
- 2道acm编程题(2014):1.编写一个浏览器输入输出(hdu acm1088);2.encoding(hdu1020)
//1088(参考博客:http://blog.csdn.net/libin56842/article/details/8950688)//1.编写一个浏览器输入输出(hdu acm1088)://思 ...
- Python自定义一个数组类,支持数组之间的四则运算和其他常见方法
class MyArray: '''保证输入的内容是整型.浮点型''' def ___isNumber(self, num): if not isinstance(num, (int,float)): ...
- python关于类和正则表达( 编写一个程序(类))
1.什么是类对象,实例对象 类对象:类名实例对象:类创建的对象 2.类属性: 就是类对象所拥有的属性,它被所有类对象的实例对象所共有,在内存中只存在一个副本.对于公有的类属性,在类外可以通过类对象和实 ...
- 【BigData】Java基础_创建一个订单类
需求描述 定义一个类,描述订单信息订单id订单所属用户(用户对象)订单所包含的商品(不定数量个商品对象)订单总金额订单应付金额: 总金额500~1000,打折85折 总金额1000~150 ...
- 编写一个Car类,具有String类型的属性品牌,具有功能drive; 定义其子类Aodi和Benchi,具有属性:价格、型号;具有功能:变速; 定义主类E,在其main方法中分别创建Aodi和Benchi的对象并测试对象的特 性。
package com.hanqi.test; public class Car { //构造一个汽车的属性 private String name; //创建getter和setter方法 publ ...
随机推荐
- (NO.00003)iOS游戏简单的机器人投射游戏成形记(五)
上一篇我们建立了机器人物理对象,下面我们来看看对应的逻辑代码. 进入Xcode,新建Robot和Arm类,分别继承于CCNode和CCSprite类.代码全部留空,后面再实现. 我们再看一下这个机器人 ...
- 【leetcode78】Single Number II
题目描述: 给定一个数组,里面除了一个数字,其他的都出现三次.求出这个数字 原文描述: Given an array of integers, every element appears three ...
- Css中的盒子结构padding和margin的区别
之前写过一个padding和marfgin的区别的博客见地址:http://blog.csdn.net/qq_32059827/article/details/50998965.那里只是笼统介绍了一下 ...
- 第三方Charts绘制图表四种形式:饼状图,雷达图,柱状图,直线图
对于第三方框架Charts(Swift版本,在OC项目中需要添加桥接头文件),首先要解决在项目中集成的问题,集成步骤: 一.下载Charts框架 下载地址:https://github.com/dan ...
- linux进程管理之进程创建
所谓进程就是程序执行时的一个实例. 它是现代操作系统中一个很重要的抽象,我们从进程的生命周期:创建,执行,消亡来分析一下Linux上的进程管理实现. 一:前言 进程管理结构; 在内核中,每一个进程对应 ...
- LayoutInflater和inflate的用法,有图有真相
1.概述 有时候在我们的Activity中用到别的layout,并且要对其组件进行操作,比如: A.acyivity是获取网络数据的,对应布局文件为A.xml,然后需要把这个数据设置到B.xml的组件 ...
- 对MBProgressHUD第三方进行源码分析
GitHub源码地址,及时更新:iOS-Source-Code-Analyze MBProgressHUD是一个为iOS app添加透明浮层 HUD 的第三方框架.作为一个 UI 层面的框架,它的实现 ...
- C/C++预处理指令#define,#ifdef,#ifndef,#endif… (转)
本文转自博文C/C++预处理指令#define,#ifdef,#ifndef,#endif….这篇博文写得特别好,特转载. 本文主要记录了C/C++预处理指令,常见的预处理指令如下: #空指令,无任何 ...
- ITU-T Technical Paper: QoS 测量 (目标,方法,协议)
本文翻译自ITU-T的Technical Paper:<How to increase QoS/QoE of IP-based platform(s) to regionally agreed ...
- 关机充电如何实现短按pwrkey灭屏
目前关机充电PWRKEY实现长按开机和短按亮屏功能,灭屏是根据BL_SWITCH_TIMEOUTS时间,自动灭屏的:如果需要实现PWRKEY主动灭屏,请按照如下方法修改: alps/media ...