Witam jestem studentem, nie jestem programista.
Chciałem się zapytać czy w podanym szablonie klasy jest sens robić iterator w innym celu niż pokazanie jak on działa ?
Możliwe, że czegoś nie zauważam.
Z góry dziękuję za odpowiedź.
#include <iostream>
using namespace std;
template <typename T>
class Table{
public:
Table(T* b,T* e):s(e-b),tab(new T[e-b])
{
T* pocz = tab;
while(b!=e)
{
*pocz = *b;
++pocz;++b;
}
}
Table(const Table& t):s(t.s),tab(new T[t.s])
{
for(unsigned i= 0 ; i< s;++i)
{
tab[i]=t.tab[i];
}
}
Table& operator=(const Table& t)
{
if(this!=&t)
{
delete tab;
s=t.s;
tab = new T[s];
for(unsigned i= 0 ; i< s;++i)
tab[i]=t.tab[i];
}
return *this;
}
~Table(){
delete[] tab;//Wersja dla tablic
}
class Iterator{
public:
Iterator(T* wsk):w(wsk){}
Iterator& operator++(){
++w;
return *this;
}
Iterator operator++(int){
Iterator temp(*this);
++(*this);
return temp;
}
T& operator*()
{
return *w;
}
T* operator->(){
return w;
}
bool operator!=(const Iterator& i)const{
return w != i.w;
}
private:
T* w;
};
Iterator begin()
{
return Iterator(tab);
}
Iterator end(){
return Iterator(tab+s);
}
private:
unsigned s;
T* tab;
};
int main()
{
int tab[] = {1, 3, 4, 8};
Table<int> vec(tab, tab + 4);
for(Table<int>::Iterator iter = vec.begin(); iter != vec.end();++iter)
cout << *iter << endl;
Table<int> vec2(vec);
for(Table<int>::Iterator iter = vec2.begin(); iter != vec2.end();iter++)
{
*iter = 1;
cout << *iter << endl;
}
for(Table<int>::Iterator iter = vec.begin(); iter != vec.end();++iter)
cout << *iter << endl;
}