如何访问链表的私有向量
how to access a private vector of linked lists
[A,0]->[B,3]
[B,0]->[A,3]
这是我计划使用的数据结构,其中 Y 坐标是向量,x 坐标是列表。 列表中的每个节点将包含一个字符串和一个整数(如上所示)。 让我们假设这是包含链表向量声明的类,好吧,称之为 Graph,因为这是一个图形赋值......[请注意,此代码不会编译,因为我勾勒了它,以使其看起来更容易让其他人阅读。
class Graph
{
public:
Graph(){...}
~Graph(){...}
private:
class Edge
{
public:
Edge(string vertex, int weight)
{
m_vertex = vertex;
m_weight = weight;
}
~Edge(){...}
string m_vertex;
int m_weight;
};
vector< list < Edge > > adjacency_list; //the vector of linked lists
};
在一个完全不同的 .h 文件中,我会声明这个类:
class Modify_Graph
{
public:
void access_Edge();
//......
private:
//......
};
这包含在Modify_graph.cpp文件中
void Modify_Graph::access_Edge()
{
adjacency_list adjList;
cout << "The very first vertex is: ";
cout << adjList[0].front().m_vertex << endl;
}
当我编译它告诉我它找不到"adjacency_list"时,有没有办法得到它? 在一个更复杂的程序中,我尝试通过引用传递它,返回它和其他东西,但似乎都没有工作。 我完全不知道该怎么办。
一个 Graph 实例来访问adjacency_list
,以及(假设它是私有的)一个用于访问成员的方法,例如类似
vector< list < Edge > > Graph::GetAdjacencyList()
{
return adjacency_list;
}
此外,您还需要在 Graph 中至少public
Edge
或在 Graph
之外声明它。
如果将其保留为公共内部类,则函数原型将是
vector< list < Graph::Edge > > Graph::GetAdjacencyList().
然后使用该函数将是大意
void Modify_Graph::access_Edge()
{
vector< list < Graph::Edge > > adjList = m_graph.GetAdjacencyList(); //m_graph being a member of type Graph
cout << "The very first vertex is: ";
cout << adjList[0].front().m_vertex << endl;
}
在 oop 中,无法以静态方式访问非静态字段。你应该提供类Modify_Graph
,引用 Graph 实例并为adjacency_List
实现一个 getter 或其他东西。
你为什么不尝试遵循一些OOP原则(Head First:面向对象的分析和设计)并从Graph声明中做出Edge类声明呢?
class Edge
{
public:
Edge(string vertex, int weight)
{
m_vertex = vertex;
m_weight = weight;
}
~Edge(){...}
string m_vertex;
int m_weight;
};
class Graph
{
public:
Graph(){...}
~Graph(){...}
private:
vector< list < Edge > > adjacency_list; //the vector of linked lists
};
然后,您可以将边缘传递给访问边缘的函数,并且只有您想要修改的边缘而不是整个列表。说真的,你的代码中有一些设计问题,阅读我推荐的书,你的生活会更容易。
这样,您甚至可以将 Edge 类重用于其他项目。
为私有成员的adjacency_list无法在实例/对象范围之外看到。这意味着在调用access_edge时,该函数甚至没有了解数据结构的许可。
您必须清楚地记住,OOP是关于数据所有权和访问权限的。这就是像private
、public
等关键词的全部内容。若要实现要执行的操作,可以使用以下方法之一:
通过在行前添加
public:
将adjacency_list声明为公共成员。如果确实要隐藏数据结构,请创建允许访问数据的公共访问函数,如access_adjacency_list和modify_adjacency_list。如果需要传递列表,请传递列表的副本。
是的,您需要传递对象实例以进行访问,因为您将列表声明为非静态列表。
- 反向给定链表中的K节点
- 如果没有malloc,链表实现将失败
- 文本文件中的单词链表
- 努力将整数转换为链表。不知道我在这里做错了什么
- 链表,反向函数,数据结构
- 在 c++ 中具有向量的双向链表构造函数
- 使用向量初始化C++中的链表
- 创建对链表向量时 Gnu 编译器的错误:无效使用"::"
- 链表与向量
- 链表:无法访问另一个结构中的结构向量
- 链表与动态数组用于使用向量类实现堆栈
- 如何访问链表的私有向量
- C++ 链表的向量
- C++:制作链表的向量
- 如何在 C/C++ 中的向量中保存链表
- 从向量到链表C++
- 如何在C++中创建一个链表向量
- 双链表指针的双链表向量
- 带有向量的链表
- 如何在c++中转换指针向量到链表