2006年12月27日水曜日

C语言实现动态数组

test.h

#ifndef TEST_H
#define TEST_H
template
<typename T>class Array
{
private:
T
* parray; //定义动态数组
int room; //存储空间大小的值
public:
Array()
:room (
0)
,parray (NULL)
{
parray
=(int*)malloc(sizeof(int)*room);
}
~Array()
{
if(parray!=NULL)
free(parray);
}
int push_back(T m) //推入一个数组元素
{
room
++;
parray
=(T*)realloc(parray,sizeof(T)*room);
*(parray+room-1)=m;
return *(parray+room-1);
}
int sizeof_Array() //得到数组大小
{
return room;
}
bool remove(int k) //删除第k个元素
{
printf(
"删除元素%d后 ",k);
if(k>room-1 || k<0)
{
return false;
}
else
{
memmove(parray
+k,parray+k+1,sizeof(T)*(room-1-k));
room
-=1;
return true;
}
}
bool insert(int k,T element) //插入一个元素
{
printf(
"插入元素%d后 ",k);
if(k>room || k<0)
{
return false;
}
else
{
room
++;
parray
=(T*)realloc(parray,sizeof(T)*room);
memmove(parray
+k+1,parray+k,sizeof(T)*(room-1-k));
*(parray+k)=element;
}
}
T query(
int k) //查询第k个元素的值
{
if(k>room-1 || k<0)
{
return -1;
}
else
{
return *(parray+k);
}
}
void display() //显示数组内元素个数
{
for(int i=0;i<room;i++)
cout
<<query(i)<<endl;
cout
<<"数组内元素个数"<<sizeof_Array()<<endl;
}
T
* begin()
{
return parray;
}
T
* end()
{
return parray + room;
}
};
#endif

test.cpp

#include<iostream>
#include
"test.h"

using namespace std;

void main()
{
Array
<int> intArray;
intArray.push_back(
1);
intArray.push_back(
2);
intArray.push_back(
3);
intArray.push_back(
4);
intArray.push_back(
5);
intArray.push_back(
6);
intArray.push_back(
7);
intArray.push_back(
8);
intArray.push_back(
9);
/*intArray.display();
intArray.remove(3);
intArray.display();
cout<<intArray.begin()<<endl;
cout<<intArray.end()<<endl;
int* ite=NULL;
for(ite=intArray.begin();ite!=intArray.end();ite++)
{
printf("%d ",*ite);
}
for(ite=intArray.end();ite!=intArray.begin();ite--)
{
printf("%d ",*ite);
}
*/
}

0 件のコメント: