首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >动态数组实现-C++

动态数组实现-C++

作者头像
WindCoder
发布2018-09-19 18:19:00
2.4K0
发布2018-09-19 18:19:00
举报
文章被收录于专栏:WindCoderWindCoderWindCoder

用链表实现的动态数组的插入、删除、查询等操作

头文件(array.h)

#ifdef ARRAY_H
#define ARRAY_H

class DynamicArray
{
public:
	DynamicArray(int alen=10,int *aData=NULL,int aSize=10):
	  m_alen(alen),m_aData(aData),m_aSize(aSize){};

	~DynamicArray(){};

	DynamicArray(const DynamicArray &aRef);

	void assign(const DynamicArray &aRef);// 用一个动态数组的对象的值去修改另外一个对象

	void append(int aValue);//添加

	bool remove(int aIndex); //删除下标为aIndex的数组元素

	bool insert( int aIndex, int aVal );//在aIndex位置的元素后面插入新元素

	bool remove(int aIndex, int aValue); //从下标为aIndex的元素开始查找,删除所有值为aValue的元素

	const int *begin() const; //返回第一个数组元素的指针
	const int *end() const; //返回最后一个元素的指针

	int at(const int aIndex) const; //返回下标为aIndex的数组元素

private:

	int m_alen;//已存的数组长度
	int m_aSize;//数组的存储空间长度
	int *m_aData;//数组首地址


};
#endif

主函数(main.cpp)

/*
功能:动态数组
日期:2013-10-19
*/
#include <iostream>
#include "array.h"
using namespace std;

int main(void)
{
    DynamicArray arr1,arr2;
	int Num,Num2;
	cout<<"请输入数组元素的个数:";
	cin>>Num;
	arr1(Num);
	DynamicArray arr2(arr1);
	cout<<"请输入需要添加的元素";
	cin>>Num;
	arr2.append(Num);
	cout<<"请输入需要删除的元素下标:";
    cin>>Num;
	arr2.remove(Num);
    cout<<"请输入需要插入新元素的前一个下标及新元素的值:";
    cin>>Num>>Num2;
	arr2.insert(Num,Num2);
	cout<<"请输入需要寻找元素的起始下标以及删除的值:";
	cin>>Num>>Num2;
	arr2.remove(Num,Num2);
    cout<<"第一个数组元素的指针为:"<<arr2.begin()<<endl;
	cout<<"最后一个元素的指针为:"<<arr2.begin()<<endl;
	cout<<"请输入需要返回的数组元素的下标:"<<arr2.begin()<<endl;
	cin>>Num;
	cout<<"下标为"<<NULL<<"的数组元素为:"<<arr2.at(Num)<<endl;



	system("pause");
	return 0;
}

实现函数(array.cpp)

/*
功能:动态数组相关功能实现函数
日期:2013-10-19
*/
#include <iostream>
#include "array.h"
using namespace std;


DynamicArray::DynamicArray(int aSize)
{
	if(aSize<0)
	{
		cout<<"size 必须为 positive"<<"且size的值为 10"<<endl;
		aSize=10;
	}
	m_aData = new int [aSize];
	if (!m_aData)
	{
		exit(0);
	}
	m_aSize=aSize;
	m_alen=0;
};
DynamicArray::DynamicArray(const DynamicArray &aRef)
{
	int i,n;
	n = aRef.m_aSize;
	m_aSize = n;
	m_aData = new int[n];
	if (!m_aData)
	{
		exit(0);
	}
    m_aData = aRef.m_aData;
	for(int i=0;i<m_aSize;i++)
	{
		m_aData[i]=aRef.m_aData[i];

	}

}
// 用一个动态数组的对象的值去修改另外一个对象
void  DynamicArray::assign(const DynamicArray &aRef)
{
	int i;
	for(i=0;i<aRef.m_aSize;i++)
	{
        m_aData[i]=aRef.m_aData[i];
	}
}
//添加
void  DynamicArray::append(int aValue)
{
	if (m_alen == m_aSize)
	{
		m_aSize = new int (m_aSize+m_aSize)
	}
	 m_aData[m_alen] = aValue;
	 m_alen++;

}
//删除下标为aIndex的数组元素
bool  DynamicArray::remove(int aIndex)
{
	int i=0;
	for(i=aIndex;i<m_alen-1;i++)
	{
		m_aData[i] = m_aData[i+1];
	}
	m_alen--;

    return true;
}
//在aIndex位置的元素后面插入新元素
bool  DynamicArray::insert( int aIndex, int aVal )
{

	if (m_alen == m_aSize)
	{
		m_aSize+=m_aSize;
		m_aData = new int(m_aSize+=m_aSize);
		m_aData[m_aSize] = aVal;
		return true;
	}
	else
	{
		for (int i=aIndex;i<m_alen-1;i++)
		{
			int tmp = m_aData[i+1];
			m_aData[i+1] = aVal;
			aVal = tmp;
		}
		m_alen++;
		m_aData[m_alen] = aVal;
		return true;
	}

}
//从下标为aIndex的元素开始查找,删除所有值为aValue的元素
bool  DynamicArray::remove(int aIndex, int aValue)
{
    int i;
	for(i=aIndex;i<m_alen;i++)
	{
		if (m_aData[i] == aValue)
		{
			remove(i);
		}
	}
	return true;
}
//返回第一个数组元素的指针
const int * DynamicArray::begin() const
{
	return &m_aData;
}
//返回最后一个元素的指针
const int* DynamicArray::end() const
{
	return &m_aData[m_alen-1];
}
//返回下标为aIndex的数组元素
int  DynamicArray::at(const int aIndex) const
{
     return m_aData[aIndex];
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014-11-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 头文件(array.h)
  • 主函数(main.cpp)
  • 实现函数(array.cpp)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档