Witam,
Mam spory problem z napisaniem własnego iteratora w ćwiczeniu.
O ile rozumiem ogólną ideę, metody, tak własna implementacja sprawia mi spory problem - a nie mogę znaleźć nigdzie dobrze wytłumaczonego tego tematu.
#ifndef VECTOR_HPP
#define VECTOR_HPP
/**
* Generic vector (array) with fixed size
*/
template<class T, int n>
class Vector {
T v[n];
int siz;
public:
Vector() { siz = 0; }
void push_back(T e) {
if (siz >= n) throw "Vector is full";
v[siz++] = e;
}
T& operator[](int i) {
if (i < 0 || i >= siz) throw "Index error";
return v[i];
}
class Iterator;
Iterator begin(){return Iterator(*this);}
Iterator end(){return Iterator(*this,siz);}
class Iterator
{
private:
T* act;
T* last;
public:
Iterator() :act(0), last(0) {}
Iterator(Vector &st) :act(st.v), last(st.v+st.siz) {} /
Iterator(Vector &st, int) :act(st.v+st.siz), last(st.v+st.siz) {}
Iterator& operator++()
{ // pre increment
if (act != last) ++act;
return act;
}
Iterator operator++(int)
{ // post increment
Iterator tmp = *this;
++*this;
return this;
}
bool operator!=(const Iterator &i)
{
if(act==i)return true; //nie wiem jak to zrobić
else return false;
}
T& operator*()
{
if (act != 0 && act != last)
return act;
}
};
};
#endif
Kod do sprawdzenia działania:
#include <iostream>
#include "vector.hpp"
using namespace std;
int main() {
Vector<int, 20> v1; // int vector with a maximum size of 20.
for (int i = 0; i < 10; i++) // fill with elements
v1.push_back(i);
Vector<int, 20>::Iterator i1; // create an iterator
for (i1 = v1.begin(); i1 != v1.end(); i1++) // print the elements
cout << *i1 << endl;
return 0;
Będę bardzo wdzięczny za jakiekolwiek uwagi - zwyczajnie nie wiem jak to ugryźć.