从抽象类创建链

时间:2019-07-11 12:08:41

标签: c++ c++11 c++14

我有一个作业,所以我并不是真正地寻找解决方案的人,只是想了解实际要求的内容,因为我觉得措辞不好。

1. Please implement the function described in the comment of this incomplete code snippet



// AudioEffect is the base class for effects that can process
// audio and have a subsequent effect (next).
struct AudioEffect {
virtual ~AudioEffect() = default;
virtual void process(float* buf, size_t num) = 0;
std::shared_ptr<AudioEffect> next;
};
// Implement a function that checks if there is a feedback loop
// in the effects chain.
... detect_feedback(...)
{
}

3 个答案:

答案 0 :(得分:1)

我能看到的唯一循环是在指针链中。

因此,您将必须遵循next指针,并确保永远不会两次遇到相同的效果。

答案 1 :(得分:0)

您要检查给定图是否为循环图。

函数参数应该是std::shared_ptr<AudioEffect>对象的容器。返回布尔。

对于容器中的每个元素,请使用BFS或DFS遍历图形。每个节点应与一个指示符组合,该指示符的值最初为0,访问后为1。程序应在访问节点之前检查指示器。如果为1,则该图为循环图。您可以抛出异常或中断循环以退出搜索。

您必须正在学习数据结构和算法。加油!

答案 2 :(得分:0)

您应该创建一个效果的链接列表,然后遍历该列表并检查每个共享指针的use_count。如果大于2,则存在反馈。