Translate

Mostrando las entradas con la etiqueta STL. Mostrar todas las entradas
Mostrando las entradas con la etiqueta STL. Mostrar todas las entradas

miércoles, 16 de octubre de 2024

Un ejemplo sencillo de STL en c++


Hagamos un ejemplo sencillo en C++ utilizando STL, queremos calcular el promedio general de un curso. Es decir, el promedio del promedio de todos los alumnos.

Entonces tenemos a la clase Alumno: 

class Alumno

{

private:

    char * nombre;

    std::vector<int> notas;

public:

    Alumno(char * nombre);

    char *getNombre() const;

    void setNombre(char *newNombre);

    double promedio();

    void addNota(int nota);

};


Y Curso: 


class Curso

{

private:

    char * nombre;

    std::vector<Alumno> alumnos;

public:

    Curso(char * nombre);

    char *getNombre() const;

    void setNombre(char *newNombre);

    void addAlumno(Alumno a);

    double promedioGeneral();

};


No copio todo el cpp porque me va quedar un post muy largo, pero es fácil de implementar. Ahora bien, primero calculamos el promedio de los alumnos: 


double Alumno::promedio()
{
    int sum = std::reduce(this->notas.begin(),
                          this->notas.end(),
                          0);
    return sum / this->notas.size();
}


Y luego el promedio de los alumnos, para esto pasamos el vector de alumnos a un vector de promedios y luego calculamos el promedio: 

double Curso::promedioGeneral()
{
    std::vector<double> promedios;
    std::transform(this->alumnos.begin(),
                   this->alumnos.end(),
                   std::back_inserter(promedios),
            [](Alumno elem) {
                return elem.promedio(); 
            });
    double acu = std::reduce(promedios.begin(),
                             promedios.end(),
                                   0);
    return acu / promedios.size();
}

Ya sé que podria solo calcular el promedio con reduce pero hago el transform, solo para hacer más completo el ejemplo. 

Y para probarlo podemos hacer : 

using namespace std;

int main()
{
    Alumno unAlumno("Juan");
    unAlumno.addNota(65);
    unAlumno.addNota(75);
    unAlumno.addNota(85);

    Alumno otroAlumno("Pedro");
    otroAlumno.addNota(64);
    otroAlumno.addNota(56);
    otroAlumno.addNota(85);

    Curso cpp("curso c++");
    cpp.addAlumno(unAlumno);
    cpp.addAlumno(otroAlumno);

    cout << "Promedio general :" << cpp.promedioGeneral() << endl;

    return 0;
}

Y listo!! 

No hay que olvidarse importar vector y numeric:

#include <vector>
#include <numeric>

viernes, 8 de marzo de 2024

Un ejemplo utilizando STL de C++


Voy hacer unos post con ejemplos de utilización de la Stl de C++. Vamos con el primero: 

Leamos una cantidad arbitraria de valores enteros (n>=1) del archivo “numbers.txt” y mostramos:

  • Mínimo, máximo
  • Media
  • Promedio
  • Media geométrica ((y1 * y2 * … yn)^(1/n))

Con Stl sería así: 

vector<int> v;

copy(istream_iterator<int>(ifstream("numbers.txt")), istream_iterator<int>(), back_inserter(v));

sort(v.begin(), v.end());

cout << "min/max: " << v.front() << " " << v.back() << endl;

cout << "median : " << *(v.begin() + (v.size()/2)) << endl;

cout << "average: " << accumulate(v.begin(), v.end(), 0.0) / v.size() << endl;

cout << "geomean: " << pow(accumulate(v.begin(),v.end(),1.0,multiplies<double>()), 1.0/v.size()) 

<< endl;

Y listo!