Moi,
väsään jonoa ja tuli ongelma.
tässä esimerkki:
std::vector<int> vektori(10); //10 alkion vektori ja arvot alustettu 0:ksi eikö? ... vektori.erase(vektori.begin()); //poistaa ekan alkion? for (int i=0;i<size-1;i++) //tietoja siirretään vektori[i] = vektori[i+1]; --size;
Aluksi kaikki näyttää olevan hyvin, mutta jostain syystä muistiin ilmestyy epämääräisiä lukuja kuten 36203562 poistettujen lukujen paikalle.
Jäi vielä ihmetyttämään koitanko tuossa for silmukassa asettaa vektori[i] kohtaan vektori[i+1]:n arvoa vai sen muistiosoitetta? :D
Katsopa miten tuota erasea kuuluu käyttää. Minusta se nimittäin automaagisesti pienentää vectorin kokoa. Pieni testiohjelma tuntuu tukevan tuota teoriaa.
#include <iostream> #include <vector> using namespace std; int main(){ int kpl, alku, koko; vector<int>vec; cout << "Anna vektorin koko" << endl; cin >> koko; for(int a = 0; a < koko; a++){ vec.push_back( a ); } do{ cout << "Anna alkukohta ja poistettavat indeksit" << endl; cin >> alku >> kpl; if((alku+kpl) > koko){ cout << "Viittaat vektorin ulkopuolelle uudestaan!" << endl; cin >> alku >> kpl; } }while((alku+kpl) > koko); vec.erase(vec.begin()+alku, vec.begin()+alku+kpl); system("CLS"); for(int a = 0; a < vec.size(); a++){ cout << vec[a] << endl; } return EXIT_SUCCESS; }
Erase olikin ohjelmassani jo valmiiksi ilman tota foria joten ongelma oli muualla. Sain selvitettyä sen (oli +1 kun piti olla -1 eräässä silmukassa)
Kiitos vastauksesta kumminkin ^^
alottelijaa kirjoitti:
std::vector<int> vektori(10); //10 alkion vektori ja arvot alustettu 0:ksi eikö? ... vektori.erase(vektori.begin()); //poistaa ekan alkion? for (int i=0;i<size-1;i++) //tietoja siirretään vektori[i] = vektori[i+1]; --size;
Noin niin kuin btw, mikä tuo size oikein on? :-) Jos tarkoitus on viitata vektorin kokoon, niin sitä ei missään nimessä kannata tehdä noin vaan käyttää suoraan vektori.size()
.
Muokattu.
Tarvin sitä sizea muuallakin kuin jäsenfunktioissa. Huono tapa juu ;)
Aihe on jo aika vanha, joten et voi enää vastata siihen.