Не знаю, как создать собственный вложенный класс Iterator для моей реализации класса User для социальной сети - PullRequest
0 голосов
/ 05 августа 2020

Я пытаюсь реализовать вложенный класс итератора для класса User для школьного проекта. Я не уверен, как go создать подкласс итератора и как заставить его работать с моим родительским классом.

Предполагается, что пользователь находится вне социальной сети, и у меня проблемы реализация способа, чтобы у этого пользователя был «Список друзей».

Правила заключаются в том, что вам не разрешено ничего изменять в файле заголовка, предоставленном инструктором, однако вы можете добавить любые методы и поля, которые вы хотите использовать класс заголовка, и все предоставленные методы должны быть реализованы.

Файл заголовка показан ниже:

class User
{
public:
    using ID = size_t;

    //! What is this user's ID?
    ID id() const;

    //! How many friends does this user have?
    size_t degree() const;

    //! Set name of this User
    void setName(std::string name);

    //! Make this User friends with another User.
    void addFriend(const User&);


    //! An iterator that can iterate over all of a User's friends
    struct FriendIterator
    {
        User& operator*();
        FriendIterator operator ++ (int);

        bool operator == (const FriendIterator&) const;
        bool operator != (const FriendIterator&) const;

    };

    //! Get an iterator that will iterate over this User's friends
    FriendIterator begin() const;

    //! Get an iterator that signifies the end of any friend iteration.
    FriendIterator end() const;

private:
};

На данный момент это то, что я добавил в приватный раздел заголовочного файла:

    std::vector<User> friends_;
    std::string name_;

    ID uID_ = generateID();
    ID generateID();

И я реализовал все методы, кроме методов Begin и End FriendIterator, а также структуры Friend Iterator.

#include "User.h"

void User::addFriend(const User& buddy)
{
    friends_.push_back(buddy);
}

void User::setName(std::string name)
{
    name_ = name;
}

size_t User::degree() const
{
    return friends_.size();
}

User::ID User::generateID()
{
    static ID newID{ 0 };
    return newID++;
}
User::ID User::id() const
{
    return uID_;
}

Я был интересно, как я мог go реализовать методы begin и end friendIterator, а также саму структуру friendIterator.

...