Use adjacent_find en combinación con functor menor o mayor.
Restricción:
Debería saber si el contenedor debe ser ascendente o descendente.
Si el vector
se supone que ser ordenados en orden ascendente:
//Checks the first element where adjacent value where elem > nextElem
//returns end if the vector is sorted!
//Complexity is O(n)
vector<int>::iterator pos = std::adjacent_find (aVec.begin(), aVec.end(), // range
std::greater<int>());
if (pos == aVec.end())
{
std::cout<<" sorted"<<endl;
}
else
{
std::cout<<"Not sorted"<<endl;
}
No se debe poner este tipo de cosas en una aserción. Las afirmaciones son para cosas que NUNCA podrían suceder. Lanzar una excepción es muy probable que sea más apropiado. Si se aprueba un vector no clasificado viola un método u objeto de contrato de operación, entonces debe arrojar no afirmar. Las excepciones ofrecen grandes ventajas sobre las afirmaciones y deben usarse con preferencia en la mayoría de los casos. – radman
@radman: Si nunca pudieran suceder, ¿por qué los afirmarías? ¡Necesitas definir el contexto! Por ejemplo: afirmar invariantes de clase, pero arrojar cuando se violan las condiciones previas de la interfaz o las postcondiciones. – ltjax
@ltjax Tu derecho que era un poco escueto. Las afirmaciones son principalmente para atrapar errores del programador, las excepciones son por malas entradas o problemas de tiempo de ejecución inevitables. Creo que las invariantes de clase son un buen ejemplo de aserciones usadas correctamente. Fundamentalmente, las aserciones proporcionan una garantía para el código que las sigue, de modo que se minimiza el manejo invasivo de errores y los errores del programador se detectan temprano y en voz alta. – radman