从抽象类创建链

create chain from abstract class

本文关键字:创建 抽象类      更新时间:2023-10-16

我有一个作业,所以我并不是真的想找人来解决它,只是想了解实际要求的内容,因为我觉得它的措辞很差。

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(...)
{
}

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

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

你要检查给定的图形是否是循环的。

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

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

您必须学习数据结构和算法。去吧!

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