Actualmente estoy desarrollando un sistema de visión que se controla/supervisa a través de una aplicación informática que estoy escribiendo en C/C++. Si te preguntas por qué estoy escribiendo en C/C++ es básicamente que mi sensor de visión (LMI Gocator 2490) tiene funciones desarrolladas en C y que estoy usando opencv (C++) para analizar sus datos. Para resumir, he tenido 1 curso de informática que estaba en C y soy malo en C++.
Me pregunto si hay una manera simple, usando o escribiendo una función, por ejemplo, para recuperar un índice de matriz que regresa a su comienzo en lugar de intentar leer y escribir en un índice que no es parte de la matriz que también causa violación de acceso a la memoria. Por ejemplo:
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 } }Entonces aquí, es fácil entender que cuando alcance el valor de 3, obtendré una violación de acceso a la memoria. Lo que me gustaría hacer es tener algún tipo de mecanismo que devuelva un índice de matriz que "bucle" de regreso al principio. En el caso que se muestra arriba, i+1 donde i = 3 sería 0. Si tuviera que poner i+2, me gustaría obtener 1, y así sucesivamente...
Esto puede ser una tontería, pero me ahorraría el dolor de escribir 4 veces la misma lógica en alguna declaración de cambio/caso dentro de un ciclo for que luego tendría que aplicar modificaciones en las 4 lógicas al depurar... ¡Gracias!
use el módulo para envolver al alcanzar el límite superior
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 } }aunque tal vez no sea un rendimiento superóptimo (bueno, con un valor de 4, el compilador puede intercambiar módulo por máscara, por lo que estaría bien).
En el caso general, evite una división y verifique si se excede, luego elija 0 si lo hace
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 } }(el código funcionará en C y C++)