erase(pos)

Status
Niet open voor verdere reacties.

Coekie

Nieuwe gebruiker
Lid geworden
11 feb 2007
Berichten
4
Ik moet een project maken voor informatica maar ik zit met een probleem.
Mijn programma vraagt 10 getallen op en die plaatst die in een vector die ik rij noem.
Nu moet ik nadien een getal kunnen verwijderen uit die vector bv

men vector bevat deze getallen

{10 , 3, 4, 3 , 4, 8, 4, 1, 5, 7} en ik wil alle drietjes verwijderen.

deze funtie heb ik gemaakt om dit te doen

int iVerw;
cout << "Geef het getal in dat je wil verwijderen: ";
cin >> iVerw;

vector<int>::iterator pos;
for( pos = rij.begin() ; pos != rij.end() ; pos++)
{
if( *pos == iVerw)
{
rij.erase( pos );
}
}

en deze foutmelding krijg ik of beter gezegt bij de debugging gaat hij deze regel aanduiden.

_SCL_SECURE_VALIDATE(this->_Mycont != NULL);
 
Ik weet het niet zeker, maar kan het zijn dat na de erase actie de vector 1 verlaagd wordt. Echter je "loopt" nog steeds met de oude waarde van vector.

Je gaat een lijst af die constant veranderd in grootte, ik weet niet of C++ onder water een kopie maakt min die ene waarde van de vector, en dan een nieuwe vector teruggeeft. Het geheugen zou anders wezen.

Ik gooi maar een balletje op. Ik heb geen idee hoe een vector precies werkt.
Laat me weten hoe het is afgelopen, ik ben benieuwd.

Met vriendelijke groet,
Jabber
 
Weet je mss ook hoe je uw vector dan verkleint ik heb geprobeert met een i (dus als ik er 1 weg doe dat ik ook 1 keer die end() verminder) erachter maar dan blijft hij steeds dezelfde fout weergeven.

groetjes
Coekie
 
Geen u graag :).

Voorbeeld om toe te vooegen:

int main()
{
vector <int> example; //Vector to store integers
example.push_back(3); //Add 3 onto the vector
example.push_back(10); //Add 10 to the end
example.push_back(33); //Add 33 to the end
for(int x=0; x<example.size(); x++)
{
cout<<example[x]<<" "; //Should output: 3 10 33
}
if(!example.empty()) //Checks if empty
example.clear(); //Clears vector
return 0;
}

Voorbeeld om te verwijderen:

example.erase( example.begin() ); // erase de eerste.
vraag daarna weer example.size() op.

Zoiets denk ik.
 
Dit lijkt mij dan een oplossing:

PHP:
vector<int>::iterator pos;
pos = rij.begin();
while(pos != rij.end())
{
if( *pos == iVerw)
{
rij.erase( pos );
pos = rij.begin();
}
else
pos++;
}
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan