es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Utilizando el método accumulate pero no se puede mostrar siempre el primer elemento como 0.

Estoy intentando escribir un programa que devuelva una lista cuyo n-ésimo elemento es la suma de los primeros valores n de la lista transferida.

list<int> summe(list<int> liste) {
        list<int> neueListe;
        list<int>::iterator itr;
        itr = liste.begin();
        int sum = 0; 
        int n = 0;

    cout << "Lista con sumas: " << endl;
    cout << "{ " << endl;
    for (itr = liste.begin(); itr != liste.end(); itr++) {
        sum = accumulate(liste.begin(), itr, 0);
        neueListe.push_back(sum);
        cout << sum << endl;
        n++;
    }
    cout << " }";
    return neueListe;

}


int main() {

//Tarea 2.2 Parte 2
list<int> l = { 1,2,3,4,5 };
Algo a;
a.summe(l);


}

La salida es: 0,1,3,6,10
Creo que el problema es que el primer bucle es accumulate(liste.begin(), liste.begin(), 0); que siempre debería ser 0. Sin embargo, no tengo idea de cómo obtener el primer elemento (aunque es solo un elemento, por lo que no es necesario acumular).
Quiero la siguiente salida: 1,3,6,10,15.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Puede modificar el código de la siguiente manera:

    list<int> summe(list<int> liste) {
            list<int> neueListe;
            list<int>::iterator itr;
            itr = liste.begin();
            int sum = 0; 
            int n = 0;
    
            cout << "Lista con sumas: " << endl;
            cout << "{ " << endl;
            for (itr = liste.begin(); itr != liste.end(); itr++) {
                if (itr == liste.begin()) {
                    sum = *itr;
                } else {
                    sum = accumulate(liste.begin(), itr, 0);
                }
                neueListe.push_back(sum);
                cout << sum << endl;
                n++;
            }
            cout << " }";
            return neueListe;
    
        }
    

    Esto dará como resultado: 1,3,6,10,15.

Comments are closed.