Problem mit Iteratoren

Kayzill

Kayzill

Greenpeace[GNU-Abteilung]
Hallo Leute!
hab da mal folgendes Problem:
Bei mir will die stringfunktion insert() einfach nicht klappen und möchte nun fragen wieso nicht,ich poste mal ein bischen code:
Code:
vector<char> ready(20);
vector<char> space(2);
space[0]=(char)" ";
vector<char>::const_iterator spa=text.begin();
for(;spa<text.end();spa++)
{
spa=find(spa,text.end(),'Ä');
text.insert(spa,10,'X');
};
mr.Debugger sagt er hätte Probleme mit dem Iterator 'spa',ich verstehe aber nicht wieso,immerhin müsste er doch richtig definiert worden sein,ich hoffe das ihr mir helfen könnt!
 
M

mapiox

Tripel-As
Original geschrieben von Kayzill
Code:
vector<char>::const_iterator spa=[b]text[/b].begin();

wie ist denn text deklariert ?

Oder sollte der Iterator auf das erste Element von einem Vector zeigen ?
 
Kayzill

Kayzill

Greenpeace[GNU-Abteilung]
text ist auch ein vektor aus chars,spa soltle auf auf das erste Element des vektors zeigen,was ya nicht klappen will.
MfG
 
M

mapiox

Tripel-As
const_iterator geht nicht da nur read_only, du möchtest aber etwas einfügen.
Code:
vector<char>::iterator spa = text.begin();

Dieses Beispiel funktioniert, wenn die Anzahl der Elemente des Vectors angegeben wird und genügend Platz zum einfügen vorhanden ist:
Code:
vector<char> text(200);
// füllen ....
vector<char>::iterator spa = text.begin();

 for( ; spa < text.end(); ++spa)
 {
   spa = find(spa,text.end(),'Ä');
   if(spa==text.end()) break;
   text.insert(spa,10,'X');
   spa+=10;
 }

Bei
Code:
vector<char> text;
ändert sich nach insert die Größe des Vectors und der Iterator ist dann üngültig.
 
Kayzill

Kayzill

Greenpeace[GNU-Abteilung]
ah okay das hab ich mri schon gedacht,nur irgendwie ging das ohen const auch net,ich probiers nachher mal bei mir Zuhause und danke hiermit schonmal:)
MfG
 
L

LiquidAcid

Grünschnabel
Versuch mal den Iterator auf Ungleichheit mit dem End-Iter zu testen, also != xyz.end(), so mache ich das immer. KA obs wirklich daran liegt.

cya
liquid
 
T

trapni

Grünschnabel
Nun, so wie es aussieht willst du in einem string einfach alle AEs durch ein X ersetzen, dazu kannst du die einfache std::replace(beginIter, endIter, oldV, newV) benutzen:

Code:
std::replace(text.begin(), text.end(), 'ä', 'X');

Zumal in deinem code sowieso ungeklaerte und falsche dinge drin standen, die aber wohl schon oben genannt wurden.

MfG,
Christian.
 

Ähnliche Themen

ip6tables Problem

Samba 4.1.11 Domänen anbindung funktioniert nicht !!!

JBidWatcher: Problem bei loading Auctions in Verbindung mit mySQL

vsftpd: internet explorer problem

xrandr: cant open display

Oben