我目前正在开发一个视觉系统,它是通过我用C/C++编写的计算机应用程序来控制/监测的。如果你想知道我为什么用C/C++编写,基本上是因为我的视觉传感器(LMI Gocator 2490)有用C开发的函数,而且我正在使用opencv (C++)来分析它的数据。长话短说,我上过一门C语言的信息学课程,但我的C++水平很差。
我想知道是否有一种简单的方法,例如,使用或编写函数,来检索循环回到其开头的数组索引,而不是尝试在不是数组一部分的索引中进行读写,这也会导致内存访问冲突。例如:
long a[4];
for (size_t i = 0; i < sizeof(a) / sizeof(long); i++)
{
if (a[i] && a[i + 1]) //Define some conditions regarding a[i] and a[i+1]
{
//Process code
}
}所以在这里,很容易理解,当我达到3的值时,我将得到mem访问冲突。我想要做的,是有某种机制,它会返回一个“循环”回到开始的数组索引。在上面显示的情况下,i=3的i+1将为0。如果我放入i+2,我希望得到1,依此类推...
这可能很愚蠢,但它将省去我在for循环内的某个switch/case语句中编写4次相同逻辑的痛苦,然后我需要在调试时在所有4个逻辑中应用修改……谢谢!
发布于 2021-11-21 17:33:12
当达到上限时使用模数进行包装
long a[4];
size_t sz = sizeof(a) / sizeof(long);
for (size_t i = 0; i < sz; i++)
{
if (a[i] && a[(i + 1) % sz]) //Define some conditions regarding a[i] and a[i+1]
{
//Process code
}
}然而,也许不是最优的性能(好吧,值为4,编译器可以用模数来换取掩码,这样就没问题了)。
在一般情况下,避免除法,并检查是否溢出,如果溢出,则选择0
for (size_t i = 0; i < sz; i++)
{
size_t j = i < sz-1 ? i+1 : 0;
if (a[i] && a[j]) //Define some conditions regarding a[i] and a[i+1]
{
//Process code
}
}(代码可以在C和C++中运行)
https://stackoverflow.com/questions/70056975
复制相似问题