¿Cómo puedo obtener el valor máximo (o mínimo) en un vector en C ++ ?
He visto algunas soluciones para esto en Google, pero ninguna de ellas tenía sentido para mí :(
¿Alguien puede explicar de una manera fácil y directa cómo obtener el valor máximo o mínimo de un vector, por favor? ¿y me equivoco al suponer que sería más o menos lo mismo con una matriz?
Necesito un iterador ¿verdad? ¿Lo probé max_element
pero seguí recibiendo un error?
vector<int>::const_iterator it;
it = max_element(cloud.begin(), cloud.end());
error: solicitud de miembro 'begin' en 'cloud', que es del tipo no int '' [10] '
EDITAR: ¿No pude responder la mía? así que lo pondré aquí ...
Wow, gracias por las respuestas rápidas! Terminé haciéndolo de esta manera, ¿crees que está bien?
for (unsigned int i = 0; i < cdf.size(); i++)
if (cdf[i] < cdfMin)
cdfMin = cdf[i];
donde cdf
es un vector
cloud
no es un contenedor STL, sino más bien unint[10]
. Básicamente,cloud
no tiene un miembro.begin()
. Es posible que desee obtener un libro básico de C ++ a menos que solo esté haciendo esto.int[10]
". ¿Cómo puede ser un vector entonces?Respuestas:
Con los indicadores de compilación de c ++ 11 / c ++ 0x, puede
De lo contrario, escriba el suyo:
Véalo en vivo en http://ideone.com/aDkhW :
Ah, y úsalo
std::minmax_element(...)
si necesitas ambos a la vez: /fuente
Si desea utilizar la función
std::max_element()
, la forma en que debe hacerlo es:Espero que esto pueda ayudar.
fuente
*
en*max_element
?Dejar,
Si el vector se ordena en orden ascendente o descendente, puede encontrarlo con la complejidad O (1).
Para un vector de orden ascendente, el primer elemento es el elemento más pequeño, puede obtenerlo por v [0] (indexación basada en 0) y el último elemento es el elemento más grande, puede obtenerlo por v [sizeOfVector-1].
Si el vector se ordena en orden descendente, el último elemento es el elemento más pequeño, puede obtenerlo por v [sizeOfVector-1] y el primer elemento es el elemento más grande, puede obtenerlo por v [0].
Si el vector no está ordenado, debe iterar sobre el vector para obtener el elemento más pequeño / más grande. En este caso, la complejidad del tiempo es O (n), aquí n es el tamaño del vector.
Puedes usar iterador,
Puede calcularlo en la sección de entrada (cuando tiene que encontrar el elemento más pequeño o más grande de un vector dado)
También puede obtener el elemento más pequeño / más grande mediante funciones integradas
Puede obtener el elemento más pequeño / más grande de cualquier rango utilizando estas funciones. como,
He usado asterisco (*), antes de las funciones min_element () / max_element (). Porque ambos devuelven iterador. Todos los códigos están en c ++.
fuente
min_element
ymax_element
devuelve un iterador , no un puntero. Sin embargo, para ser técnicamente correcto, un puntero es un subconjunto de un iterador. Ver: stackoverflow.com/questions/2728190/…Suponiendo que la nube es
int cloud[10]
, puedes hacerlo así:int *p = max_element(cloud, cloud + 10);
fuente
Puede imprimirlo directamente usando la función max_element / min_element. P.ej:
fuente
En c ++ 11, puede usar alguna función como esa:
fuente
std::max_element
porque ...?Si desea utilizar un iterador, puede hacer una nueva ubicación con una matriz.
Tenga en cuenta la falta de un
()
al final, eso es importante. Esto crea una clase de matriz que usa esa memoria como almacenamiento y tiene características STL como iteradores.(Esto es C ++ TR1 / C ++ 11 por cierto)
fuente
Puede usar max_element para obtener el valor máximo en vector. Max_element devuelve un iterador al valor más grande en el rango, o último si el rango está vacío. Como un iterador es como punteros (o puede decir que el puntero es una forma de iterador), puede usar un * antes para obtener el valor. Entonces, según el problema, puede obtener el elemento máximo en un vector como:
Le dará el elemento máximo en su vector "nube". Espero eso ayude.
fuente
Sólo esta:
fuente
int cloud[10];
y es el uso de números mágicos.La manera más completa ... en C
fuente
vector
for
bucle. En general, una respuesta muy pobre.