这不是一个功课问题。我在社区学院学习了数据结构,现在我在大学时,我和老师谈了数据结构课程。现在,因为它真的与我转移的课程不同,他给了我一个任务,然后用它来玩。我们从未做过任何容器,包装,模板,...... 所以,我有点失落,我正在努力加快速度。我不是新的链接列表,队列,堆栈,循环数组,树等等。我们从来没有使用对象,容器做任何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;正确?
答案 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,它与定义中的返回类型不匹配。
虽然没有审查设计方面的代码......