Pisze szablon klasy vec, w ktorej musze zdefiniowac:
Komplet konstruktorów (łącznie z konstruktorem przemieszczającym i konstruktorem z listą inicjacyjną)
Destruktor
Operatory podstawienia (zwykły i przemieszczający)
Operatory indeksowania (zwykły i const)
Metoda size (okreslajaca liczbe elementów w obiekcie vec)
Metoda push_back (dołożenie nowego elementu na koniec kolekcji)
Operator wyprowadzenia na strumień wyjściowy << ma być zdefiniowany jako szablon funkcji.
do tej pory stworzylem cos takiego; prosze o sprawdzenie i pomoc w pozostalych elementach zadania :)
class vec
{
int sz; // liczba elementów
string* elem; // wskazanie na pierwszy element
public:
vec(int s = 0)
:sz(s > 0 ? s : 0),
elem(new string[sz])
{
for (int i = 0; i < size(); ++i)
elem[i] = 0.0;
}
vec(const vec& src)
:sz(0),
elem(nullptr)
{
*this = src;
}
~vec()
{
delete[] elem;
}
int size() const {return sz;}
void push_back(string nv)
{
string *pbuf = new string[size() + 1];
for (int i = 0; i < size(); ++i)
pbuf[i] = elem[i];
pbuf[size()] = nv;
++sz;
delete[] elem;
elem = pbuf;
}
string& operator[](int idx)
{
if (idx < 0 || idx >= size())
throw string("Przekroczony zakres rozmiar vec");
return elem[idx];
}
string operator[](int idx) const
{
if (idx < 0 || idx >= size())
throw string("Przekroczony zakres rozmiar vec");
return elem[idx];
}
int operator[](const string& s)
{
for (int i = 0; i < size(); i++)
{
if (elem[i] == s)
return i;
}
push_back(s);
return size()-1;
}
vec& operator=(const vec& right)
{
if (this == &right)
return *this;
delete[] elem;
sz = right.size();
elem = new string [size()];
for (int i=0; i<size(); ++i)
{
elem[i] = right[i];
}
return *this;
}
};
ostream& operator<<(ostream& os, const vec& right)
{
os << '[';
for (int i = 0; i < right.size(); i++)
os << right[i] << ' ';
return os << ']';
}