Problema Vector Stack

fire7777777
ragazzi premetto che non sono alle prime armi in programmazione, non capisco che problema abbia il mio codice, probabilmente c'è qualche problema di puntatori ecc, vi spiego, ho fatto un vettore di pile >nome_ecc
, fatto questo è inserito un tot di pile tramite un for e il metodo di vector.push_back, quindi nome_ecc.push_back() , come parametro ho messo una pila creta prima del push e dentro del for, una volta uscito dal for metto dei valori in ogni pila, il problema è che quando arriva all'ultima crasha, come mai? ho provato a vedere , la dimensione del vettore è corretta ma è come se non funziona l'ultima coda, come mai?

Spero di poter trovare un valido aiuto, grazie ragazzi :)

Risposte
apatriarca
Senza vedere il codice è impossibile darti una risposta.

fire7777777
per esempio se io gia metto questo come codice , non mi inizializza tutte le pile, si ferma ad n-1 ed esce, come mai?! che cos'è che sbaglio?!

#include <math.h>
#include <iostream>
#include <string>
#include <vector>
#include <stack>
#include <sstream>

int main()
{
    int n;
    cin >> n;

    vector<stack<string> > veStack(n);

    for(int i = 0; i < veStack.size(); i++)
    {
        string s;
        getline(cin,s);
        istringstream ss(s);

        while(ss>>s)
        {
            veStack[i].push(s);
        }
    }
}

apatriarca
NdM: Ho inserito il tuo codice all'interno di un blocco di codice per renderlo di più facile lettura.

Forse non ho capito bene.. Si ferma ad n-1 il ciclo perché gli indici vanno da 0 a n-1 in C++.. Ho forse frainteso la tua domanda?

fire7777777
si io gli dico attraverso il cin , inserisco per esempio 4, dovrebbe crearmi 4 elementi del vettore, quindi 4 pile, una volta fatto questo faccio il for , lo rimeto per 4 volte, da i=0 i<4 , quindi le iterazioni sono 0,1,2,3 , il che quindi mi usa le 4 pile create, vado a fare il push degli elementi che leggo per riga e li metto nella pila corrispondente, il problema è che se io metto che ci sono 4 pile , lui mi fa il cin di 3 pile, questo è il problema xd

Grazie per l'editazione :)

fire7777777
up

apatriarca
Sono passate meno due due ore dal tuo precedente messaggio. Per quanto tu abbia possa avere fretta abbiamo tutti una vita e non abbiamo necessariamente il tempo di studiare più a fondo il tuo programma.

In ogni caso il problema risiede nell'utilizzo misto di lettura dati usando "cin >>" e "getline". La riga cin << n legge un numero ma lascia nello stream il carattere di a capo che viene quindi consumato dal successivo getline (che leggerà quindi una riga molto probabilmente vuota). La soluzione risiede quindi nell'inserire qualcosa come std::cin.ignore(256,'\n'); prima del ciclo.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.