我有一个作业,所以我并不是真正地寻找解决方案的人,只是想了解实际要求的内容,因为我觉得措辞不好。
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(...)
{
}
答案 0 :(得分:1)
我能看到的唯一循环是在指针链中。
因此,您将必须遵循next
指针,并确保永远不会两次遇到相同的效果。
答案 1 :(得分:0)
您要检查给定图是否为循环图。
函数参数应该是std::shared_ptr<AudioEffect>
对象的容器。返回布尔。
对于容器中的每个元素,请使用BFS或DFS遍历图形。每个节点应与一个指示符组合,该指示符的值最初为0,访问后为1。程序应在访问节点之前检查指示器。如果为1,则该图为循环图。您可以抛出异常或中断循环以退出搜索。
您必须正在学习数据结构和算法。加油!
答案 2 :(得分:0)
您应该创建一个效果的链接列表,然后遍历该列表并检查每个共享指针的use_count。如果大于2,则存在反馈。