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.