Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: STL:n vektori

alottelijaa [20.03.2009 18:07:31]

#

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

Teuro [20.03.2009 18:18:05]

#

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;
}

alottelijaa [20.03.2009 19:16:37]

#

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 ^^

LaNu [22.03.2009 01:25:47]

#

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().

alottelijaa [22.03.2009 09:42:08]

#

Muokattu.

Tarvin sitä sizea muuallakin kuin jäsenfunktioissa. Huono tapa juu ;)

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta