链表和函数指针

时间:2013-08-28 09:41:18

标签: c++ linked-list function-pointers

我正在尝试学习函数指针和链表。

在课堂上(作为私人),我有

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;
    }
}

1 个答案:

答案 0 :(得分:0)

可能无需在apply_all()方法中实际存储函数指针。相反,您需要设置一个循环,迭代列表中的每个元素,然后为每个元素调用函数指针。根据您的triple()函数判断,您可能希望将结果存储回列表中,否则它将无法执行任何操作。

在不知道列表类的其余部分是如何构造的情况下,很难给出示例代码。基本上,你会在apply_all()

的循环中放置这样的东西
nodevalue = pointerToFunction(nodevalue);

如果您不知道,C ++标准模板库实际上已经包含了所有这些功能。有std::list类,以及std::transform()std::for_each()等函数,它们可以将函数指针(或其他可调用函数)应用于每个元素。

您可能还想查看C ++ 11中引入的std::function模板。它使函数指针更容易使用!