Jump to content
  • Advertisement

Archived

This topic is now archived and is closed to further replies.

BingoClownO

ADT - Array Class

This topic is 5738 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I am refreshing my knowledge of C++ and would like to implement an Array class with a 'grow' function which takes an integer as an argument, and resizes the current array to the specified size. My class an implementation are in the header file array.h, at this point I have drawn a blank as to where to start from with regards to implementing the grow function and wondered if anyone could point me in the right direction? Array.H :
    

// header: array.h

#ifndef _ADTARRAY
#define _ADTARRAY

#include <assert.h>
#include <iostream.h>

template <class BType, class IType = int>		// defaults are OK here too

class Array
{
	protected:
    	BType *arrayData;						// pointer to data

		int lobnd, hibnd;						// 'actual' bounds

		bool outOfRange(IType i);			// function to test bounds

	public:
		Array(int SZ = 16, IType lo = 0);// constructor

		Array(const Array &x);				// copy constructor

		~Array();								// destructor

		IType lo() const;						// return this->lobnd

		IType hi() const;						// return this->hibnd

		BType& operator[](IType i);		// overload the [] operator ...

		BType& operator[](IType i) const;// ... and again

		Array<BType, IType>& operator= (const Array<BType, IType> &x);
		  											// overload the = operator

		void grow(int);						// change array size

};

// implementation


template <class BType, class IType>
Array<BType, IType>::Array(int SZ, IType lo)
	: lobnd(lo), hibnd(lo + SZ - 1)
{
	assert(SZ > 0);
	arrayData = new BType[SZ];
	assert (arrayData != 0);
}

template <class BType, class IType>
Array<BType, IType>::Array(const Array<BType, IType> &x)
	: lobnd(x.lobnd), hibnd(x.hibnd)
{
	arrayData = new BType[hibnd - lobnd + 1];
	assert (arrayData != 0);
	(*this) = x;	// use assignment

}

template <class BType, class IType>
Array<BType, IType>::~Array()
{
	delete [] arrayData;
}

template <class BType, class IType>
inline IType Array<BType, IType>::lo() const
{
	return lobnd;
}

template <class BType, class IType>
inline IType Array<BType, IType>::hi() const
{
	return hibnd;
}

template <class BType, class IType>
bool Array<BType, IType>::outOfRange(IType i)
{
	if (i < lobnd || i > hibnd)
	{
		cout << "Array index " << i << " is out of range" << endl;
		return true;
	}
	else return false;
}

template <class BType, class IType>
BType& Array<BType, IType>::operator[](IType i)
{
	assert (!outOfRange(i));
	return(arrayData[i - lobnd]);
}

template <class BType, class IType>
BType& Array<BType, IType>::operator[](IType i) const
{
	assert (!outOfRange(i));
	return(arrayData[i - lobnd]);
}

template <class BType, class IType>
Array<BType, IType>& Array<BType, IType>::operator=(const Array<BType, IType> &x)
{
	assert (hibnd - lobnd == x.hibnd - x.lobnd);    // arrays must be same size

	for (int i = 0; i <= hibnd - lobnd; ++i)
		arrayData[i] = x.arrayData[i];
	return *this;
}

template <class BType, class IType>
void Array<BType, IType>::grow(int newS)
{

}

#endif

  
"If you want to build a ship, don't drum up the men to gather wood, divide the work, and give orders. Instead, teach them to yearn for the vast and endless sea." - Antoine de Saint Exupery [edited by - BingoClownO on March 30, 2003 7:56:52 PM]

Share this post


Link to post
Share on other sites
Advertisement

  
template < class BType, class IType >
void Array< BType, IType >::grow(int newS)
{
// compute existing array dimension

int sz = hibnd - lobnd + 1;
 
// compute new array upper bound

hibnd += newS;
 
// allocate "resized" array

BType * newData = new [ hibnd - lobnd + 1 ]; // use new dimensions

 
// copy over existing values

for( int i = 0; i < sz; ++i )
newData[ i ] = arrayData[ i ];
 
// optionally zero out remainder of newData:

sz += newS;
for( ; i < sz; ++i )
newData[ i ] = BType(0); // assumes the existence of null BType value

 
// release existing array and swap class data pointer

delete [] arrayData;
arrayData = newData;
}

Share this post


Link to post
Share on other sites

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!