如果查看输出,您可以看到listOrder的内容是什么,这些是正确的内容。但是,只要我将它传递给我的图形构造函数并输出相同的列表,我就会乱七八糟。我怀疑这与我的Vertex *内容的adjacencyList有关,但我不明白我的指针是如何混乱的。请帮我把正确的节点放到图形矢量中!
for (vector<char>::iterator it=listOrder.begin(); it!=listOrder.end(); ++it)
{
cout << "ListNode: " << *it << endl;
}
Graph graph(listOrder, adjacencyList);
for (vector<char>::iterator it=graph.getOrder().begin(); it!=graph.getOrder().end(); ++it)
{
cout << "Node: " << *it << endl;
}
构造函数
Graph::Graph(vector<char> newVertices, map<char, Vertex*> newAL)
{
vertices = newVertices;
adjacencyList = newAL;
}
GetOrder功能
vector<char> Graph::getOrder()
{
return vertices;
}
输出
ListNode: A
ListNode: B
ListNode: C
ListNode: D
ListNode: E
ListNode: F
ListNode: G
Node: ░
Node: ↨
Node: >
Node:
Node: ─
Node:
Node: >
答案 0 :(得分:3)
每次调用getOrder
时都会返回向量的副本,因此迭代器不是来自同一个容器。
通过引用从getOrder
返回向量,或者只调用getOrder
一次以获取向量的副本,然后遍历该向量。
类似的东西:
vector<char> v(graph.getOrder());
for (vector<char>::iterator it=v.begin(); it!=v.end(); ++it)
{
cout << "Node: " << *it << endl;
}
答案 1 :(得分:0)
我建议使用基于范围的。它可以帮助您避免遇到的一些问题。
你的getOrder函数在每次调用时返回一个不同的向量,这意味着你无法有效地比较一次调用的迭代器。
如果您重新编写代码,那就是这样的:
for (auto &it : listOrder)
{
cout << "ListNode: " << it << endl;
}
Graph graph(listOrder, adjacencyList);
for (auto &it : graph.getOrder())
{
cout << "Node: " << it << endl;
}
它将有更好的工作机会。
答案 2 :(得分:0)
使用复制构造函数初始化类成员
Graph::Graph(vector<char> newVertices, map<char, Vertex*> newAL)
: vertices(newVertices)
, adjacencyList(newAL)
{}