ADT - 迭代器 - 运算符++

时间:2010-10-27 06:34:31

标签: c++ iterator operator-overloading abstract-class structure

这不是一个功课问题。我在社区学院学习了数据结构,现在我在大学时,我和老师谈了数据结构课程。现在,因为它真的与我转移的课程不同,他给了我一个任务,然后用它来玩。我们从未做过任何容器,包装,模板,...... 所以,我有点失落,我正在努力加快速度。我不是新的链接列表,队列,堆栈,循环数组,树等等。我们从来没有使用对象,容器做任何ADT层次结构。

我没有关于ADT层次结构的书 - 容器,对象..任何人都可以推荐一本。不知道该怎么查?只是ADT?

这是我的问题。我想完成他给我的这段代码.. 我正在尝试编写函数++()= 0; 我不确定语法

#ifndef ITERATOR_H
#define ITERATOR_H
#include "Object.h"


class Iterator
{
public:
virtual ~Iterator ();
virtual void Reset () = 0;
virtual bool IsDone () const = 0;
virtual Object& operator * () const = 0;
virtual void operator ++ () = 0;
};

#endif

,这是容器标题..

#ifndef CONTAINER_H
#define CONTAINER_H

#include <ostream>
#include "Object.h"
#include "Ownership.h"
#include "Iterator.h"
#include "Visitor.h"

class Container : public virtual Object, public virtual Ownership
{
protected:
unsigned int count;

Container ();
public:
virtual unsigned int Count () const;
virtual bool IsEmpty () const;
virtual bool IsFull () const;
//  virtual HashValue Hash () const;
virtual void Put (ostream&) const;
virtual Iterator& NewIterator () const;

virtual void Purge () = 0;
virtual void Accept (Visitor&) const = 0;
};

#endif

这里是container.cpp文件,我需要有关++

语法的帮助
#include <iostream>
#include "Container.h"

void Container::Purge()
{

if (IsOwner())

count = 0;

}

Container::Container () :
count (0)
{}

unsigned int Container::Count () const
{ return count; }

bool Container::IsEmpty () const
{ return Count () == 0; }

bool Container::IsFull () const
{ return false; }



Iterator Iterator::operator ++() //syntax wrong..
{

return;

}

Iterator& Container::NewIterator() const
{

return *new Container (*this); 


}

我也不确定我是否使用了虚拟Iterator&amp; NewIterator()const;正确?

3 个答案:

答案 0 :(得分:2)

C ++具有迭代器概念,这些概念与您在模式书或其他语言中看到的略有不同。他有这个op ++返回void是非C ++;如果保留这个模型,我会把它变成一个常规的命名方法。但是,那就是你的问题:你有一个返回类型的迭代器,而类定义说无效。

NewIterator 是无限递归的(显然很快修复了?mispaste?),返回类型应该是by-value,而不是by-reference。标头和.cpp文件中的返回类型都是错误的。但是,这里还有其他的东西,因为Iterator是一个抽象的基类;我相信你应该写自己的派生类:

struct MyIterator : Iterator {
  //...
};

实际上,刮一下,Container 也是一个抽象基类,而不是你应该直接实现的东西。 (这意味着NewIterator要么有内存泄漏,要么每个容器只支持一个迭代器,所以它实际上不是 new 迭代器......)

您需要了解更多信息。您没有足够的资源来帮助我们。我建议将Programming: Principles and Practice using C++作为新程序员的C ++的一般介绍,但它涵盖了比数据结构更广泛的范围,并且可能无法帮助你完成你现在所做的大学准备 - 似乎他们正在尝试用C ++编写Java ...

答案 1 :(得分:1)

我认为你应该看一下STL中的迭代器。它会帮助你构思。

关于你的代码,operator ++被声明为返回void,这是错误的。您还忘记了operator ++的另一个版本,operator--和operator-&gt;成员函数,是使用迭代器的好帮手。

您的容器没有实际存储数据的成员变量,而NewIterator中有无限递归。

你也缺少很多参考资料。

答案 2 :(得分:0)

我可以看到'语法错误'问题可能存在一个问题。

您的operator ++被声明为返回void,它与定义中的返回类型不匹配。

虽然没有审查设计方面的代码......