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 ...
随机推荐
- [TCP] 网络协议流程图
之前在跟别人讲协议的时候总是找不到类似的图,这次再看python网络编程书籍的时候找到了一个,留存一份. 清晰的看到不同协议在不同层的传输过程!
- vs2010 单文档MFC 通过加载位图文件作为客户区背景
实现效果: 这个其实是一个非常常见的功能,大家都会考虑给自己简单的工程做一个背景界面.其实只要在view类中重载OnEraseBkgnd()这个函数就好了. 代码如下: BOOL CdddView:: ...
- Mahout系列之----共轭梯度预处理
对于大型矩阵,预处理是很重要的.常用的预处理方法有: (1) 雅克比预处理 (2)块状雅克比预处理 (3)半LU 分解 (4)超松弛法
- 【一天一道LeetCode】#10. Regular Expression Matching
一天一道LeetCode系列 (一)题目 Implement regular expression matching with support for '.' and '*'. '.' Matches ...
- 用m4 macros创建文本文件
用m4 macros创建文本文件 原文链接: http://ldp.linux.no/linuxfocus/ChineseGB/September1999/article111.html 补充阅读 ...
- STL常用排序算法介绍
merge() 以下是排序和通用算法:提供元素排序策略 merge: 合并两个有序序列,存放到另一个序列. #include <iostream> #include <cstdi ...
- Rest api简介
理解和使用内容协商 我们的开发者在发送一个 REST API 请求的同时,根据应用场景,针对相同的资源,可能会期待不同的返回形式. 比如,我希望根据用户客户端语言,同一个资源的内容可以返回不同的语言. ...
- 网站开发进阶(十)如何将一个html页面嵌套在另一个页面中
如何将一个html页面嵌套在另一个页面中 1.IFrame引入 <IFRAME NAME="content_frame" width=100% height=30 margi ...
- 网站开发进阶(六)JSP两种声明变量的区别
JSP两种声明变量的区别 在JSP中用两种声明变量的方法,一种是在<%! %>内,一种是在<% %>内.他们之间有什么区别呢?我们直接看一个JSP文件来理解. 代码如下: &l ...
- C语言在linux内核中do while(0)妙用之法
为什么说do while(0) 妙?因为它的确就是妙,而且在linux内核中实现是相当的妙,我们来看看内核中的相关代码: #define db_error(fmt, ...) \ do { \ fpr ...