Как правило, класс графа мало что делает, потому что все данные находятся в вершинах или ребрах (в зависимости от того, что представлено объектами - звучит так, будто вы хотите объекты вершин).
Итак, вы можете иметь
template< typename T >
struct Vertex {
bool visited;
T data;
vector< Vertex * > edges;
size_t getWeight() const { return edges.size(); }
bool getvisited() const { return visited; }
void setvisited( bool v ) { visited = v; }
};
Возможно, вы захотите, чтобы графическое стекло владело всеми вершинами и предотвращало проблемы с отключением или циклами при попытке его уничтожить.
template< typename T >
struct Graph {
typedef Vertex< T > vertex_t;
deque< vertex_t > vertices;
vertex_t &get_vertex() {
return * vertices.insert( vertices.end(), vertex_t() );
}
};
… и сделайте конструкторы Vertex
закрытыми, а Graph его friend
, чтобы сделать Graph
единственным способом получения вершин.