什么是安全墙,我该如何使用?

时间:2015-05-09 08:50:02

标签: c++ sentinel

我用Google搜索并找到“安全墙”的零答案,所以我很确定这不是正确的术语。我会自己解释一下:

正如我所读到的,我正在谈论采用二维阵列并将其放置在同一个阵列中,每侧增加一个单元格以确保保持安全并且不会超出我创建的限制

这项技术的正确术语是什么?我将如何使用它?

2 个答案:

答案 0 :(得分:0)

像其他人一样,你需要搜索它" sentinel"或类似" sentinel control" ..

当您不知道程序的大小或限制时,可以使用sentinel控件。例如,您正在编写一个计算级别的平均等级的程序。但是你不知道有多少学生在课堂上。或者你插入你不知道限制的数组。然后你可以使用sentinel控件来完成这项工作。

让我们看看这个例子,

int grade;
int totalgrade = 0; 
int studentCount = 0;

std::cin >> grade;

while (grade != -1) 
{
totalgrade = totalgrade + grade;
studentCount ++;
std::cin >> grade;
} // loop until user enter -1

因此,如果您不知道将从用户输入多少个值,您可以对此作业使用sentinel控件。您还可以阅读有关sentinel value

的更多信息

答案 1 :(得分:0)

这些通常被称为“鬼影单元”,通常用于数值模拟或图像处理,其中您将内核(例如平滑或差分运算符)应用于数组。它们允许你在没有特殊外壳边缘的情况下应用内核。

例如;假设你想要平滑图像 - 你可以使用像:

这样的内核
0.0   0.1   0.0
0.1   0.6   0.1
0.0   0.1   0.0

您可以通过获取源图像来应用此功能,并且对于每个像素,您可以通过将内核置于源像素上并将9个覆盖像素的加权贡献相加来计算目标像素的值(0.6 *源像素,加上上面,下面和侧面的每个像素值的0.1倍。对每个像素执行此操作,您最终会得到原始图像的平滑版本。

这很好用,但问题是“你在边境小区做什么?”不是为边界情况设置复杂的if / then逻辑(这可能很棘手并且会降低性能),你可以在每一侧添加1层鬼影单元。

当然,您必须在运行算法之前为单元格选择值。如何选择它们的值取决于您的算法。你可以选择将它们全部设置为零,但是在平滑内核的情况下,这会使你的图像边缘变暗,这可能不是你想要的。更好的计划是用最近的非鬼细胞的值填充鬼细胞。

您还需要弄清楚需要多少个鬼细胞,这取决于内核的大小。对于像上面这样的3x3内核,你需要1层鬼影单元(以处理可能“悬挂”边缘的内核部分)。更复杂的内核可能需要更多(5x5内核需要2层等)。

你可以谷歌“幽灵细胞计算”来了解更多(添加'计算'或者你会得到很多的生物学结果!)