Witam.
Mam problem z napisaniem własnego iteratora do napisanej szablonowej klasy typu wektor, przechowującej inne obiekty.
Szukając informacji i przykładów o iteratorze, w większości przypadków natrafiałem na wykorzystywanie iteratotra dla gotowej klasy Vector. Cięzko było znaleźć informacje o pisaniu własnego iteratora. Znalazłem co prawda jeden przykład, ale klasa, po której poruszał się iterator, działała na zasadzie listy jednokierunkowej. Moja klasa wektorowa korzysta natomiast z tablicy dynamicznej, przez co nie moge przenieść kodu z przykładu na mój.
Moje pytanie brzmi, czy da się w ogóle zaimplementować iterator swobodnego dostępu do stworzonej przeze mnie klasy?
Prosiłbym również o jakieś wskazówki dla początkującego, którym jestem, jak utworzyć wspomniany iterator.
Poniżej zamieszczam kod mojej klasy wektorowej:
#ifndef VECTORCLASS_H_
#define VECTORCLASS_H_
#include <iostream>
#include "ProductClass.h"
template <typename Type>
class VectorClass {
private:
int vectorsize_;
Type *table_;
int top_;
public:
VectorClass();
explicit VectorClass(int s);
VectorClass(const VectorClass & vc); //konstruktor kopiujący
virtual ~VectorClass();
int push(const Type & item);
int push(const Type & item, int place);
void print();
};
#endif /* VECTORCLASS_H_ */
//**************************************************************************************
template <typename Type>
VectorClass<Type>::VectorClass() : vectorsize_(3), top_(0) {
table_ = new Type[3];
}
template <typename Type>
VectorClass<Type>::VectorClass(int s) : vectorsize_(s), top_(0) {
table_ = new Type[s];
}
//konstruktor kopiujący
template <typename Type>
VectorClass<Type>::VectorClass(const VectorClass & vc){
vectorsize_ = vc.vectorsize_;
top_ = vc.top_;
table_ = new Type[vectorsize_];
for (int i = 0; i < vectorsize_; i++){
table_[i] = vc.table_[i];
}
}
template <typename Type>
VectorClass<Type>::~VectorClass() {
delete [] table_;
}
template <typename Type>
int VectorClass<Type>::push(const Type & item)
{
if (top_ > vectorsize_ - 1){
VectorClass temp(*this);
vectorsize_ += 3;
table_ = new Type[vectorsize_];
for (int i = 0; i < temp.vectorsize_; i++)
table_[i] = temp.table_[i];
}
table_[top_] = item;
top_++;
return 0;
}
template <typename Type>
int VectorClass<Type>::push(const Type & item, int place)
{
if (place + 1 > vectorsize_ -1 ){
VectorClass temp(*this);
vectorsize_ += 3;
table_ = new Type[vectorsize_];
for (int i = 0; i < temp.vectorsize_; i++)
table_[i] = temp.table_[i];
}
table_[place] = item;
if (place == top_)
top_++;
return 0;
}
template <typename Type>
void VectorClass<Type>::print()
{
for (int i = 0; i <= vectorsize_ - 1; i++){
table_[i].print();
}
}