Solved
HELP - My Vector Class won't work.
Posted on 2004-09-26
Hey. I recently made a vector, and I thought everything was smooth sailing, however, I tried to construct an object of my vector class with typename std::string, and it didn't work. It gave me an assertion, and I can't seem to figure out why. Here is my code, up to my index operator:
#ifndef VECTOR_H
#define VECTOR_H
#include<iostream>
template <typename T>
class vector
{
public:
//Default Constructor
vector();
//Destructor
~vector();
//Copy Constructor
vector(const vector<T>&);
//Assignment Operator
vector<T>&operator=(const vector<T>&);
//Index Operator
T& operator[](unsigned int);
//Equivalence
bool operator==(const vector<T>&);
//Returns the actual number of elements
unsigned int size() const;
//Append a copy of an element to the end of vector<T>
void push_back(const T&);
//Remove last appended element
void pop_back();
//Clears all items
void clear();
//Reserves specified amount of memory for vector<T>
void reserve(unsigned int);
private:
unsigned int THE_SIZE;
unsigned int THE_ARRAY_CAPACITY;
T* theDataPtr;
};
const unsigned int INTIAL_Capacity = 10;
template <typename T>
vector<T>::vector()
{
theDataPtr = new T[INTIAL_Capacity];
THE_SIZE = 0;
THE_ARRAY_CAPACITY = INTIAL_Capacity;
}
template <typename T>
vector<T>::~vector()
{
delete theDataPtr;
}
template <typename T>
vector<T>::vector(const vector<T>& org)
{
T* TempPtr = new T[(org.THE_ARRAY_CAPACITY)];
for(unsigned int i=0; i<org.THE_SIZE; i++)
{
TempPtr[i] = org.theDataPtr[i];
}
(*this).THE_ARRAY_CAPACITY = org.THE_ARRAY_CAPACITY;
(*this).THE_SIZE = org.THE_SIZE;
(*this).theDataPtr = TempPtr;
}
template <typename T>
vector<T>&vector<T>::operator=(const vector<T>& rhs)
{
if((*this) == rhs)
{
return *this;
}
else
{
T* TempPtr = new T[(rhs.THE_ARRAY_CAPACITY)];
for(unsigned int i=0; i<rhs.THE_SIZE; i++)
{
TempPtr[i] = rhs.theDataPtr[i];
}
(*this).THE_SIZE = rhs.THE_SIZE;
(*this).THE_ARRAY_CAPACITY = rhs.THE_ARRAY_CAPACITY;
delete[](*this).theDataPtr;
(*this).theDataPtr = TempPtr;
return *this;
}
}
template <typename T>
T& vector<T>::operator[](unsigned int pos)
{
if(pos < THE_ARRAY_CAPACITY && pos < THE_SIZE)
{
return theDataPtr[pos];
}
else
{
try
{
if(pos >= THE_SIZE) throw "Out of Range";
}
catch ( char*str)
{
std::cerr << "Exception: " << str << std::endl;
}
return theDataPtr[(pos+THE_ARRAY_CAPACITY+THE_SIZE)];
}
}
Then this is my main.cpp:
#include "vector.h"
#include <iostream>
#include <string>
int main()
{
vector<string> yep;
return EXIT_SUCCESS;
}
However, this won't work. I require assistance, please.