gpt4 book ai didi

c++ - ADT - 迭代器 - 运算符++

转载 作者:行者123 更新时间:2023-11-30 03:09:34 25 4
gpt4 key购买 nike

这不是一道作业题。我在一所社区学院学习了数据结构,现在我在大学里,我和老师谈过那里的数据结构类(class)。现在,因为它真的很不一样,而且我上的课也转了,他给了我一份作业,并说要玩。我们从未做过任何容器、包装器、模板、..所以,我有点迷茫,我正在努力加快速度。我对链接列表、队列、堆栈、循环数组、树等并不陌生。我们只是从来没有用对象、容器做过任何 ADT 层次结构。

我没有一本关于 ADT 层次结构的书——容器、对象……谁能推荐一本。不确定要查找什么?只是ADT?

这是我的问题。我正在尝试完成他给我的这段代码..我正在尝试编写函数 operator++ () = 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);


}

我也不确定我是否做了 virtual Iterator& NewIterator () const;对吧?

最佳答案

C++ 的迭代器概念与您在模式书籍或其他语言中看到的概念略有不同。他有这个 op++ return void 是非常非 C++ 的;如果保留此模型,我会将其设为常规命名方法。但是,这就是您的问题所在:您的返回类型为 Iterator,而类定义为 void。

NewIterator 是无限递归的(显然很快就修复了?误贴了?),返回类型应该是按值,而不是按引用。此返回类型在头文件和 .cpp 文件中都是错误的。但是,这里还有一些其他事情,因为 Iterator 是一个抽象基类;我相信您应该编写自己的派生类:

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

实际上,从头开始,Container 也是一个抽象基类,而不是您应该直接实现的东西。 (这意味着 NewIterator 要么存在内存泄漏,要么每个容器仅支持一个迭代器,因此它不是真正的迭代器...)

您需要询问更多信息。你没有足够的帮助我们帮助你。我推荐 Programming: Principles and Practice using C++作为对新程序员的 C++ 的一般介绍,但它涵盖的范围比数据结构更广,可能对你现在正在做的大学预科没有帮助——看起来他们正试图用 C++ 编写 Java...

关于c++ - ADT - 迭代器 - 运算符++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4030562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com