Trabajo con una gran cantidad de código de cálculo escrito en C ++ pensando en un alto rendimiento y una baja sobrecarga de memoria. Utiliza contenedores STL (principalmentevector
) mucho, e itera sobre esos contenedores casi en cada función.
El código iterativo se ve así:
for (int i = 0; i < things.size(); ++i)
{
// ...
}
pero produce la falta de coincidencia firmada / no firmada advertencia de (C4018 en Visual Studio).
Reemplazarlo int
con algún unsigned
tipo es un problema porque con frecuencia usamos pragmas OpenMP y requiere que el contador sea int
.
Estoy a punto de suprimir las (cientos de) advertencias, pero me temo que me he perdido alguna solución elegante al problema.
En iteradores . Creo que los iteradores son geniales cuando se aplican en lugares apropiados. El código con el que estoy trabajando nunca cambiará los contenedores de acceso aleatorio en list
o algo así (por lo que la iteración int i
ya es independiente del contenedor), y siempre necesitará el índice actual. Y todo el código adicional que necesita escribir (el iterador en sí y el índice) simplemente complica las cosas y ofusca la simplicidad del código subyacente.
int
.