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 … 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
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;
}
