2013-12-19 57 views
0

如果你看看輸出,你可以看到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: > 
+1

我沒有看到你輸出相同的列表中,我看到了兩個不同的列表。請更好地解釋自己,併爲'getOrder'函數添加更多的代碼。 –

+0

已經添加該代碼 – CodeManiak

+0

你嘗試過valgrind嗎? – razeh

回答

3

您傳回矢量每次getOrder被稱爲副本的初始化,所以迭代器是不是來自同一個容器中。

要麼通過引用從getOrder返回矢量,要麼只需調用getOrder一次以獲取矢量的副本,然後遍歷該矢量。

喜歡的東西:

vector<char> v(graph.getOrder()); 
for (vector<char>::iterator it=v.begin(); it!=v.end(); ++it) 
{ 
    cout << "Node: " << *it << endl; 
} 
+0

無疑這是問題 – CodeManiak

+0

良好的漁獲!我完全錯過了這一個。 –

0

我建議使用基於範圍。它將幫助您避免您遇到的一些問題。

您的getOrder函數在每次調用時都返回一個不同的向量,這意味着您無法有效比較從一次調用到另一次調用的迭代器。

如果你返工你的代碼,所以它是這樣的:

for (auto &it : listOrder) 
{ 
    cout << "ListNode: " << it << endl; 
} 
Graph graph(listOrder, adjacencyList); 
for (auto &it : graph.getOrder()) 
{ 
    cout << "Node: " << it << endl; 
} 

這將有更好的工作機會。

+0

這會不會不給迭代器的類型編譯。此外,基於對循環範圍內是不允許在C++ 98這正是我需要這與 – CodeManiak

+0

好的工作,但你仍然需要避免從不同的呼叫比較迭代器getOrder()。 – razeh

+0

如果我在比較價值而不是地址,爲什麼這是一個問題? – CodeManiak

0

使用拷貝構造函數的類承包商,客人

Graph::Graph(vector<char> newVertices, map<char, Vertex*> newAL) 
: vertices(newVertices) 
, adjacencyList(newAL) 
{} 
+0

嘗試過,但它並沒有解決問題:( – CodeManiak