我对c ++有点新意,所以问题可能没有任何意义,所以,提前抱歉。 所以,我有一类哈希表,我的哈希表是向量的向量,这意味着我使用了
std::vector<std::vector<std::string> > htable;
我的任务是 - 使用++, - , - &gt;创建自己的迭代器。和*。我写了这个
class hashTable
{
public:
hashTable(int size);
~hashTable();
void add(std::string s);
bool inHash(std::string s);
void deletestr(std::string s);
void printall();
int maxcoll();
private:
std::vector<std::vector<std::string> > htable;
std::vector<std::vector<std::string> > newhtable;
int hfunc(std::string s);
void reallocate();
int M;
int teksize;
int issame(std::string a, std::string b);
class myiterator{
myiterator();
myiterator operator*();
myiterator operator++();
myiterator operator--();
myiterator operator->();
};
myiterator begin() {return htable.begin()}
myiterator end() {return htable.end()}
};
我想,我理解了这个是什么,但现在我想我错了,所以当我尝试编译时,行中有一个错误
myiterator begin() {return htable.begin()}
myiterator end() {return htable.end()}
/ Users / ratkke / Programms / c ++ / mipt / tasks /#5 / myhash.cpp:37:29:错误:无法从'iterator'(又名'__wrap_iter')转换为'hashTable :: myiterator' myiterator begin(){return htable.begin()} ^ ~~~~~~~~~~~~~ /Users/ratkke/Programms/c++/mipt/tasks/#5/myhash.cpp:29:8:注意:候选构造函数(隐式复制构造函数)不可行:没有来自'iterator'的已知转换(又名'__wrap_iter') 'const hashTable :: myiterator&amp;'第一个论点 class myiterator {
我不知道为什么。另外,你能告诉我关于向量迭代器的迭代器(或文章的链接)的实现,因为我无法理解我必须如何实现所有这些运算符。 先感谢您。
答案 0 :(得分:0)
您需要实施myiterator
。有很多方法可以做到这一点,但至少你必须向myiterator
添加一些内容。例如
class myiterator{
public:
myiterator();
myiterator(std::vector<std::vector<std::string> >& v, int ii, int jj) :
vec(v), i(ii), j(jj) {}
std::string operator*();
myiterator& operator++(); // prefix operator
myiterator operator++(int); // postfix operator
myiterator& operator--(); // prefix operator
myiterator operator--(int); // postfix operator
std::string* operator->();
private:
std::vector<std::vector<std::string> >& vec; // the vector we are iterating over
int i; // the position in the vector (first dimension)
int j; // the position in the vector (second dimension)
};
myiterator begin() {return myiterator(htable, 0, 0);}
很多其他方法可以做到这一点,而上述内容可能并不完全符合您的要求,但希望这可以为您提供一个想法,myiterator
必须有一些数据成员来保持向量的迭代和位置到目前为止。
另请注意,operator*
的返回类型错误,应该(大概)为std::string
。其他一些运营商看起来也不正确,我已经把我认为正确的代码放在了代码中。