my very own Array class -> like iterator pattern :)

Hello i have implemented a Array class with wich i(and you) can make an array of objects(any object), automaticaly search it for a certain object, send objects from inside an array to another. For now it’s very simple beacause i don’t have time to write one with much more useful things… hopefully will help someone. I made this at seing the list class … i don’t like it … just looks so stiff  :| . Hhere’s the code .. :)

#include <iostream>
using namespace std;
/* Array class writen by … (just visit sinea.wordpress.com)
 * this has to be something like list in c++
 * but much easier to use by overloading some
 * operators .. 
 * TODO :   – extend functionality
 * [- get a life :) ) ] 
 */
template <class T>
class Array
{
T* objects;
bool fixedLength;
int numberOfObjects;
public:
Array(int length = 0, bool fix = false)
{
fixedLength = fix;
if(length != 0)
objects = new T[length];
else
objects = new T[];
numberOfObjects = 0;
};
//ADD NEW  T ITEM AT THE END OF THE ARRAY AND RETURN IT
T& push(T object)
{
objects[numberOfObjects++] = object;
return objects[0];
}
//REMOVE THE LAST OBJECT OF THE ARRAY AND RETURN THE NEW LAST ONE
T& pop()
{
objects[numberOfObjects] = NULL;
numberOfObjects–;
return objects[numberOfObjects];
}
//SWITCH 2 OBJECTS IN THE ARRAY RETURN BOOL ACCORDINGLY(SUCCES OR NOT)
bool switchObjects(int firstIndex, int secondIndex)
{
if(firstIndex >= numberOfObjects || secondIndex >= numberOfObjects)
throw “WTF IS WITH THAT INDEX :O “;
try
{
T temp = objects[firstIndex];
objects[firstIndex] = objects[secondIndex];
objects[secondIndex] = temp;
}
catch(…)
{
return false;
}
return true;
}
//FIND OUT THE INDEX OF A OBJECT STARTING FROM THE GIVEN INDEX AND RETURN -1 IF THE OBJECT DOES NOT EXIST
int idexOf(T object, int starIndex = 0)
{
for(int i = starIndex;  i < numberOfObjects; i ++)
if(objects[i] == object)
return i;
return -1;
}
//RETURN THE CURENT LENGTH OF THE ARRAY
int Length() const
{
return numberOfObjects;
}
//CLEAN THE ARRAY AND RETURN BOOL(SUCCES OR FAILURE)
bool Clean()
{
try
{
for(int i = 0;  i < numberOfObjects; i ++)
objects[i] = NULL;
numberOfObjects = 0;
}
catch(…)
{
return false;
}
return true;
}
//EASY RETURN THE ITEM FROM A ARRAY BY USING THE [] OPERATOR(OVERLOADED)
T& operator[](int index)
{
if(index >= numberOfObjects)
throw “WTF IS WITH THAT INDEX :O “;
return objects[index];
}
// USE THIS IF WE WANT TO CONCATENATE 2 ARRAYS
bool operator+=(Array& from)
{
for(int i = 0; i < from.Length() ; i ++)
{
push(from[i]);
}
return true;
}
// USE IF WE WANT THIS ARRAY TO SEND THE OBJECTS AT THE INDEXS SPECIFIED IN THE elements[]
void SendElements(Array& to, int elements[], int nElements)
{
for(int i = 0; i < nElements; i++)
to.push(objects[elements[i]]);
}
};
int main()
{
Array<int> arr;
arr.push(10);
arr.push(101);
arr.push(12);
Array<int> aray2;
aray2.push(88);
aray2.push(99);
for(int i=0; i<arr.Length(); i++)
cout << arr[i] << ” “;
cout << endl;
arr.switchObjects(1, 2);
for(int i=0; i<arr.Length(); i++)
cout << arr[i] << ” “;
cout << endl;
arr += aray2;
int elem[] = {0, 1};
aray2.SendElements(arr, elem, 2);
aray2 = arr;
cout << “aray2 “;
for(int i=0; i<aray2.Length(); i++)
cout << aray2[i] << ” “;
cout << endl;
cout << “arr “;
for(int i=0; i<arr.Length(); i++)
cout << arr[i] << ” “;
cout << endl;
return 0;
}

#include <iostream>

using namespace std;

 

/* Array class writen by … (just visit sinea.wordpress.com)

 * this has to be something like list in c++

 * but much easier to use by overloading some

 * operators … and adding some fancy functionality

 * TODO :   – extend functionality

 * [- get a life :) ) ] 

 */

template <class T>

class Array

{

T* objects;

bool fixedLength; // ACTUALLY DOES NOT HELP WITH ANYTHING :P

int numberOfObjects;

public:

Array(int length = 0, bool fix = false)

{

fixedLength = fix;

if(length != 0)

objects = new T[length];

else

objects = new T[];

numberOfObjects = 0;

};

//ADD NEW  T ITEM AT THE END OF THE ARRAY AND RETURN IT

T& push(T object)

{

objects[numberOfObjects++] = object;

return objects[0];

}

//REMOVE THE LAST OBJECT OF THE ARRAY AND RETURN THE NEW LAST ONE

T& pop()

{

objects[numberOfObjects] = NULL;

numberOfObjects–;

return objects[numberOfObjects];

}

//SWITCH 2 OBJECTS IN THE ARRAY RETURN BOOL ACCORDINGLY(SUCCES OR NOT)

bool switchObjects(int firstIndex, int secondIndex)

{

if(firstIndex >= numberOfObjects || secondIndex >= numberOfObjects)

throw “WTF IS WITH THAT INDEX :O “;

try

{

T temp = objects[firstIndex];

objects[firstIndex] = objects[secondIndex];

objects[secondIndex] = temp;

}

catch(…)

{

return false;

}

return true;

}

//FIND OUT THE INDEX OF A OBJECT STARTING FROM THE GIVEN INDEX AND RETURN -1 IF THE OBJECT DOES NOT EXIST

int idexOf(T object, int starIndex = 0)

{

for(int i = starIndex;  i < numberOfObjects; i ++)

if(objects[i] == object)

return i;

return -1;

}

//RETURN THE CURENT LENGTH OF THE ARRAY

int Length() const

{

return numberOfObjects;

}

//CLEAN THE ARRAY AND RETURN BOOL(SUCCES OR FAILURE)

bool Clean()

{

try

{

for(int i = 0;  i < numberOfObjects; i ++)

objects[i] = NULL;

numberOfObjects = 0;

}

catch(…)

{

return false;

}

return true;

}

//EASY RETURN THE ITEM FROM A ARRAY BY USING THE [] OPERATOR(OVERLOADED)

T& operator[](int index)

{

if(index >= numberOfObjects)

throw “WTF IS WITH THAT INDEX :O “;

return objects[index];

}

// USE THIS IF WE WANT TO CONCATENATE 2 ARRAYS

bool operator+=(Array& from)

{

for(int i = 0; i < from.Length() ; i ++)

{

push(from[i]);

}

return true;

}

// USE IF WE WANT THIS ARRAY TO SEND THE OBJECTS AT THE INDEXS SPECIFIED IN THE elements[]

void SendElements(Array& to, int elements[], int nElements)

{

for(int i = 0; i < nElements; i++)

to.push(objects[elements[i]]);

}

};

 

int main()

{

Array<int> arr;

arr.push(10);

arr.push(101);

arr.push(12);

Array<int> aray2;

aray2.push(88);

aray2.push(99);

for(int i=0; i<arr.Length(); i++)

cout << arr[i] << ” “;

cout << endl;

arr.switchObjects(1, 2);

for(int i=0; i<arr.Length(); i++)

cout << arr[i] << ” “;

cout << endl;

 

arr += aray2;

int elem[] = {0, 1};

 

aray2.SendElements(arr, elem, 2);

 

aray2 = arr;

cout << “aray2 “;

for(int i=0; i<aray2.Length(); i++)

cout << aray2[i] << ” “;

cout << endl;

 

cout << “arr “;

for(int i=0; i<arr.Length(); i++)

cout << arr[i] << ” “;

cout << endl;

 

return 0;

}

Advertisement

~ by sinea on May 17, 2009.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s

 
Follow

Get every new post delivered to your Inbox.