【问题标题】:linked lists and function pointers [closed]链表和函数指针
【发布时间】:2013-08-28 09:41:17
【问题描述】:

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

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

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

我在这里缺少什么部分?它似乎对列表中的节点没有任何作用。

编辑:问题解决了!作为 cmets 和答案,我从未对节点做过任何事情。我现在遍历列表,它工作正常,谢谢大家:)

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

【问题讨论】:

  • 您必须遍历您的列表并以某种方式将该函数应用于每个列表项。那个代码不见了。
  • 当然没有对节点做任何事情,你不会在任何地方调用函数指针(我们可以看到)。

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


【解决方案1】:

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

如果不了解列表类的其余部分的结构,很难为此提供示例代码。不过,基本上,您可以在 apply_all() 内的循环中添加这样的内容:

nodevalue = pointerToFunction(nodevalue);

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

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

【讨论】:

    猜你喜欢
    • 2018-07-28
    • 1970-01-01
    • 2011-12-13
    • 1970-01-01
    • 2018-09-12
    • 1970-01-01
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多