2013-08-28 57 views
-1

我想了解函數指針和鏈表。鏈表和函數指針

在類(如私有)我有

int (*m_pointerToFunction)(int); 

void List::apply_all(int (*pointerToFunction) (int)){ 
    m_pointerToFunction = pointerToFunction; 
} 

int triple(int i) 
{ 
    return 3*i; 
} 

被稱爲與該列表L2與

L2.apply_all(triple); 

我在這裏錯過了什麼部分?它似乎沒有對列表中的節點進行任何操作。

編輯:問題解決!作爲評論和答案,我從來沒有對節點做過任何事情。我現在遍歷列表,它工作正常,謝謝大家:)

void List::apply_all(int (*pointerToFunction) (int)){ 
    Node *temp = head; 
    while(temp){ 
     temp->value = pointerToFunction(temp->value); 
     temp = temp->next; 
    } 
} 
+0

您必須迭代您的列表並以某種方式在每個列表項上應用該函數。該代碼缺失。 – jxh

+3

當然,節點沒有做任何事情,你不要在任何地方調用函數指針(我們可以看到)。 –

回答

0

有可能無需實際函數指針存儲在您apply_all()方法。相反,你需要設置一個循環遍歷列表中的每個元素,然後調用每個元素的函數指針。通過你的triple()函數判斷,你可能想要將結果存回你的列表中,否則它不會做任何事情。

如果不知道列表類的其他部分是如何構造的,就很難給出示例代碼。但基本上,你就會把這樣的事情在一個循環內apply_all()

nodevalue = pointerToFunction(nodevalue); 

如果你不知道,標準模板庫實際上包括了所有這些功能了。有std::list類,以及像std::transform()std::for_each()這樣的函數可以將函數指針(或其他可調用函數)應用於每個元素。

您可能還想看看在C++ 11中引入的std::function模板。它使函數指針更容易處理!