¿Cuáles son algunos URI de buen código de ejemplo que utilizan algoritmos STL (aparte de la ordenación)?

Bueno, si desea URI, estoy bastante seguro de que podría buscarlo en “Google”. Aquí hay algunos enlaces buenos, ¿por qué deberíamos usar el algoritmo STL sobre nuestro casero? 5 ejemplo más.

Las personas del estándar C ++ proporcionan porque saben que sería útil para muchas aplicaciones, no porque tengan tanto tiempo libre. Hace unos años, no usaría el algoritmo C ++ (ni siquiera lo sabía), ni siquiera usaría isdigit (), ni isalpha () de y escribiría mi propia función como is_number (), es_alfabeto () y uso el mío. Más tarde, me di cuenta de que mi propia función casera no se acerca en nada a lo que el estándar proporcionaba. Esto es lo que dice el autor de C ++, Stroustrup, “[Si] usa una alternativa, usted (o su organización) será responsable del mantenimiento y la evolución de la alternativa” para siempre “. En general: trate de no reinventar la rueda ”(Stroustrup 859). Si ya está utilizando el lenguaje, ¿por qué no utilizar también su biblioteca estándar, que es realmente útil?

La biblioteca es muy útil. Bueno, si vas a usar contenedores C ++, mejor usa . Por ejemplo, supongamos que estaba usando y desea encontrar algún elemento dentro del vector. Puede escribir su propio bucle e intentar hacer coincidir el elemento, como siempre lo hago antes, lo que daría como resultado una línea múltiple y algo ineficiente. ¿Qué pasaría si estuvieras usando otro contenedor, o si quisieras encontrarlo comenzando desde el final, entonces tendrías que escribir otro ciclo y cambiar muchas cosas? Simplemente puede usar la familia find () (Sí, también hay una función para encontrarlo desde el final), y funcionaría para cualquier contenedor (por supuesto, el contenedor también debería ser compatible con ). Lo mismo aplica para todos los demás algoritmos. Stroustrup citó: “La razón por la cual los contenedores y algoritmos STL funcionan tan bien juntos es que no se conocen entre sí. – Alex Stepanov ”(Stroustrup 953).

Aquí hay otro ejemplo, suponga que se le da un entero con signo arbitrario y tiene que averiguar qué primer número positivo falta en el número, y debe hacerlo en O (n) tiempo y O (1) espacio. ¿Qué harías? Bueno, una manera fácil es encontrar el número máximo y asignar bool de número máximo y luego, cada vez que encontramos un elemento, giramos el interruptor. Pero la restricción es que tenemos que usar un espacio constante. ¿Qué pasa si todos los números dados son todos positivos, entonces usted tendría espacio O (n), entonces no pasaría la prueba? Otra forma fácil es que puede ordenar el número y seguir avanzando hasta que encuentre el primer número faltante positivo. Eso tampoco funcionará porque el tiempo de ejecución del algoritmo de clasificación más rápido es O (nlogn). Bueno, si piensas cuidadosamente, hay muchas maneras de resolver esto usando , pero usar la partición () de es una forma de resolverlo. ¿Cómo? Si divide los números de manera que los números a la izquierda del pivote sean todos negativos y los números a la derecha sean positivos usando algo como a continuación.

partición (nums.begin (), nums.end (), [] (int a) {return a <0;});

Después de la partición, el problema se vuelve bastante fácil, te dejaré a ti averiguar el resto.

Podría seguir y seguir sobre todas las funciones de , pero no solo use lo que le enseñaron, aprenda de lo que le enseñaron y aplique el conocimiento. La escuela evalúa a las personas más de lo que se enseñó porque no se trata de “¿Qué alumno puede memorizar lo que se mostró en la clase?”, Sino de “¿Puede el alumno aplicar el material?” Buena suerte y disfrute de su aprendizaje.

Citación

Stroustrup, Bjarne. El lenguaje de programación C ++. Upper Saddle River, Nueva Jersey: Addison-Wesley, 2015. Impresión.