Я пытаюсь реализовать вложенный класс итератора для класса 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.