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

1 回答 1

0

可能不需要将函数指针实际存储在您的apply_all()方法中。相反,您需要设置一个循环来遍历列表中的每个元素,然后为每个元素调用函数指针。从您的triple()功能来看,您可能也希望将结果存储回您的列表中,否则它不会做任何事情。

如果不知道列表类的其余部分是如何构成的,就很难给出示例代码。不过,基本上,你会在里面的循环中放这样的东西apply_all()

nodevalue = pointerToFunction(nodevalue);

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

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

于 2013-08-28T10:19:56.057 回答