0
点赞
收藏
分享

微信扫一扫

c++动态数组的实现,类的作用的实现

westfallon 2022-04-19 阅读 81
c++

定义一元素为整数的动态数组类,并在主函数中调用各个功能:

数据成员:指向元素首地址的指针(用于存储动态申请的数组空间)、当前数组的容量、当前元素的个数;

成员函数:

1.带参/无参构造函数(无参的动态申请10个元素空间并改变当前数组的容量、当前元素的个数值;带参的按参数处理);

2.在尾部增加一元素;

3.修改指定位置上的元素值;

4.查询指定数据的元素是否存在;

5.输出所有数组中的元素;

6.增加数组容量(动态申请新容量数组空间、将原来数组空间中的元素复制到新空间并修改当前数组的容量值,释放delete原来数组空间) ;

7.析构函数(释放动态申请的数组空间) ;

8.二分查询指定数据的元素并返回原始所处的位置(选作,首先在函数内定义一个结构体数组,临时存放当前元素值和位置。其次,使用sort函数对结构体数组排序,最后,利用二分(折半)查找方法找指定元素是否存在。存在,返回原始位置值。否则,返回-1。返回前释放结构体数组的空间)。
 

#include<iostream>
#include<algorithm>
#include<cmath>
#include<string>
using namespace std;
struct start
{
int m_1;//初始位置
int m_2;//初始值
}
class array
{
int * p;
int size;//动态数组中个数
int capacity;//数组容量
public:
array();//构造无参函数
array(int x);//构造有参函数
void add_last(int x);//增加元素
void change(int m_1,int x);//修改m_1处的值为x
int chaxun(int x);//二分查找
void printall();//输出元素
void add_capacity(array,int capacity);//将数组复制到新的空间,并增加数组容量
~array();
}
array::array(){

capacity=10;//无参传入10个元素空间
size=0;
p=new int[capacity];
}
array::array(int x){
capacity=x;//x为元素空间
size=0;
p=new int[capacity]
}
void array::add_last(int x){
if(capacity==size){
return;
}
p[size]=x;//最后增加一个元素
size++;//总数增加1
}
void change(int m_1,int x){
p[m-1-1]=x;//数组从0开始,m_1位置相当于m_1-1位置
}
bool map(struct start a,struct start b){//sort函数的条件
if(a.m_2<b.m_2) return true;
else return false;
}
int array::chaxun(int x){//二分查找x位置
start arr[1000];
for(int i=0;i<size;i++){
arr[i].m_1=i;arr[i].m_2=p[i];}
int left=0;int right=size-1;
while(left<=right){
int middle=(left+right)/2;
if(x==arr[middle].m_2) return arr[middle].m_1+1;
if(x<arr[middle].m_2) right=middle-1;
else left=middle+1;
}return -1;
}
void array::printall(){//输出动态数组
for(int i=0;i<size;i++){
cout<<p[i]<<" ";
}cout<<endl;
}
void array::add_capacity(arrar arr,int x){//扩充数组容量
capacity=arr.capacity+x;
size=arr.size;
p=new int[capacity];
for(int i=0;i<size;i++){
p[i]=arr.p[i];
}
}
array::~array(){//析构函数,全部清空
delete[]p;
p=NULL;
size=0;
capacity=0;}
int main(){
int n,x;
cout<<"请输入数组元素容量:"<<endl;
cin>>n;
array a(n);//主函数调用类
cout<<"请输入"<<n<<"个元素的值:"<<endl;
for(int i=0;i<size;i++){
cin>>x;
a.add_last(x);
}
cout<<"修改指定位置元素的值:"<<endl;
a.change(3,1005);
cout<<"打印数组"<<endl;
a.printall();
cout<<"扩容增加15"<<endl;
a.add_capacity(a,15);
a.printall();
cout<<"查询是否有值等于5并返回原位置"<<endl;
cout<<a.chaxun(5)<<endl;
a.~array();
return 0;
}
举报

相关推荐

0 条评论