什么是安全墙,我该如何使用它
What is a safety wall and how do I use it?
我已经搜索了"安全墙"的零答案,所以我敢肯定这不是正确的术语。我会解释自己:
正如我所读的,我正在谈论采用二维数组,并将其放在同一数组中,并在每一侧增加一个单元格,以确保保持安全,并且不算出我创建的限制。
此技术的正确术语是什么?我将如何使用它?
就像其他人所说的那样,您需要搜索"前哨"或类似"前哨控制"的东西。
当您不知道程序的尺寸或限制时,您可以使用前哨控制。例如,您正在编写一个程序,该程序正在计算级别的班级等级。但是,您不知道课堂上有多少学生。或者您插入不知道限制的数组。然后,您可以将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控件来完成此作业。您还可以阅读有关前哨的更多信息。
这些通常称为"幽灵单元",通常在数值模拟或图像处理中使用,您将内核(例如平滑或差异操作员)用于数组。它们允许您无需特殊壳边缘应用内核。
例如;假设您想平滑图像 - 您可以使用类似的内核:
0.0 0.1 0.0
0.1 0.6 0.1
0.0 0.1 0.0
您可以通过获取源图像,对于每个像素,您可以通过将内核核算在源像素上的核心来计算目标像素的值,并添加9个覆盖像素的加权贡献(0.6 *的值(0.6 *的值)源像素,加上上方,下方和侧面每个像素的值的0.1倍)。为每个像素执行此操作,最终将获得原始图像的平滑版本。
这效果很好,但是问题是"您在边界细胞上做什么?"如果/随后逻辑对于边框案例而变得复杂(这可能很棘手并且可能会降低性能),而是可以在每一侧添加1层鬼单元。
当然,您必须在运行算法之前选择单元格值。您如何选择其价值取决于您的算法。您可能会选择将它们全部设置为零,但是在平滑内核的情况下,这会使您的形象在其边界处变暗,因此这可能不是您想要的。一个更好的计划是用最近的非玻璃细胞的值填充幽灵细胞。
您还需要弄清楚需要多少个幽灵细胞,这取决于内核的大小。对于上面的3x3内核,您需要1层的幽灵细胞(要照顾可能"悬挂"边缘的内核部分)。更复杂的内核可能需要更多(5x5内核需要2层等)。
。您可以Google Google"鬼单元计算"以了解更多信息(添加'计算',否则您将获得生物学结果的 lot !)
- 从不同线程使用int64的不同字节安全吗
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 使用std::istream::peek()总是安全的吗
- 在c++队列中使用pop和visit实现线程安全
- 在函数结束后使用指向变量的指针是否安全?
- 如何使用 CLANG 禁用格式安全错误?
- 在什么条件下使用 std::memcpy 在对象之间复制是安全的?
- 如何使用Windows API C++更改已创建的文件夹/目录安全权限
- 使用安全零内存新建/删除时出现问题
- 使用安全模式从DLL(通过(INTPTR)参数传递到该函数)获取char **
- 使用C 安全套接字连接
- 在常量函数中使用安全的非常量函数
- 将memcpy与Eigen类型的向量一起使用安全吗
- Malloc与nogil一起使用安全吗
- 策略模式中应该使用安全指针吗
- 使用安全_vsnprintf_s获取所需的缓冲区长度
- SIGRTMIN和SIGRTMAX在信号处理程序中使用安全吗?
- 这个线程池使用安全吗?
- std::bind和boost::signals2一起使用安全吗?
- 将`basename`与__FILE__一起使用安全吗