Ya has obtenido varias respuestas, pero no puedo estar de acuerdo con ninguna de ellas. Algunos se acercan bastante a la marca, pero no mencionan el punto crucial (IMO, por supuesto).
Al menos para mí, el punto crucial es bastante simple: debes usar los algoritmos estándar cuando ayudan a a aclarar el código que estás escribiendo.
Es así de simple. En algunos casos, lo que está haciendo requeriría una invocación misteriosa usando std::bind1st
y std::mem_fun_ref
(o algo de ese orden) que es extremadamente denso y opaco, donde un bucle for
sería casi trivialmente simple y directo. En tal caso, siga adelante y use el ciclo for
.
Si no hay un algoritmo estándar que haga lo que desea, tenga cuidado y mire de nuevo; a menudo habrá omitido algo que realmente hará lo que desea (un lugar que a menudo se pierde: los algoritmos en <numeric>
son a menudo útil para usos no numéricos). Habiendo mirado un par de veces, y confirmado que hay realmente no es un algoritmo estándar para hacer lo que desea, en lugar de escribir ese for
bucle (o lo que sea) en línea, considere escribir un algoritmo genérico para hacer lo que necesita hacer. Si lo está usando en un solo lugar, hay muchas posibilidades de que pueda usarlo dos o tres más, y en ese punto puede ser una gran victoria en cuanto a claridad.
Escribir algoritmos genéricos no es tan difícil; de hecho, a menudo es casi ningún trabajo extra en comparación con escribir un ciclo en línea, por lo que incluso si solo puede usarlo dos veces, ya está ahorrando un poco de trabajo , incluso si ignora la mejora en la legibilidad y claridad del código.
"No he visto su uso" - ¿eh? Estoy sorprendido. No puedo darte contraejemplos fuera de mi cabeza, pero STL definitivamente está ahí + una de las mejores bibliotecas alrededor. –
No puedo recordar la última vez que vi un programa considerable de C++ _sin_ al menos un algoritmo STL. Heck, 'std :: sort' solo se usa en el 90% de los programas que no son de juguete – MSalters
Debería ver nuestro código. Millones de líneas de C++ y ni una pizca de stl en cualquier lugar cercano. Sin embargo, estábamos desarrollando C++ cuando el stl era solo un sueño, y las plantillas eran mal compatibles con los escritores de tehcompiler. En el momento en que la stl se hizo adecuada para nuestro propósito, habíamos estado utilizando nuestro propio equivalente laminado durante varios años. Para nosotros no es necesario usar otra implementación de una cadena, vector o clase de lista. – lilburne