2012-03-11 19 views
7

Con frecuencia me encuentro escribiendo funciones de valor máximo que buscan a través de una matriz de dobles. Utilizo funciones como estas para normalizar los datos antes de la visualización gráfica.Función C++ para encontrar el valor máximo en una matriz de dobles?

¿Hay alguna manera mejor de encontrar el valor máximo de una serie de dobles? ¿Hay una función estándar para encontrar el valor máximo en una matriz? ¿Hay alguna intrínseca para esta operación? Recuerdo que existía instrucción ASM especializada en chips DSP.

Respuesta

16

¡Sí! Hay una función llamada std::max_element:

double arr[LENGTH] = /* ... */ 
double max = *std::max_element(arr, arr + LENGTH); 

Tendrá que #include <algorithm> para hacer esto. Ese encabezado tiene un montón de cosas buenas, y vale la pena tomarse el tiempo para aprender más sobre los contenedores STL y las bibliotecas de algoritmos, ya que pueden hacer que su vida sea tan fácil.

Mientras estamos en el tema, considere buscar en std::vector o std::array como reemplazos para matrices C++ sin formato. Son más seguros y un poco más fáciles de usar.

Espero que esto ayude!

+0

Tengo demasiado miedo para reemplazarlos por std :: vectores porque mi código se auto-vectoriza muy bien. – Mikhail

+0

@Misha: No tengas miedo, solo inténtalo y ejecuta algunas pruebas para asegurarte de que tu rendimiento sea bueno. No es para nada un miedo irracional. Nos encontramos con una caída del rendimiento de casi el 20% en algunas secciones críticas de rendimiento (una gran cantidad de operaciones de bucle y punto flotante) y lo rastreamos al pasar de VS 6 a 2005. Comprobaron los iteradores y la comprobación de los límites (iirc) activado por defecto. –

Cuestiones relacionadas