2013-08-28 58 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模板。它使函数指针更容易处理!