Avatar billede corona10 Nybegynder
25. november 2004 - 12:22 Der er 1 løsning

Hvordan bruger jeg en iterator?

Jeg har en graf klasse der indeholder følgende metode der returnerer en iterator over de knuder der er incidente til en knude:

VertexList::iterator VisibilityGraph::adjacentVertices(PolarVertex* v) {
  EdgeList* edg = v->edges;
  VertexList* ver = new VertexList();
  EdgeList::iterator eiter = (*edg).begin();
 
  for(eiter = (*edg).begin(); eiter != (*edg).end(); ++eiter) {
    if((*eiter)->origin == v) {
      ver->push_back((*eiter)->destination);
    }
    else{
      ver->push_back((*eiter)->origin);
    }
  }
  VertexList::iterator viter = (*ver).begin();
  return viter;
}

Når jeg så vil bruge min metode gør jeg følgende i min test klasse:

VertexList::iterator iter = vg->adjacentVertices(v);
  for(iter = vg->adjacentVertices(v); iter != ^^^vg->adjacentVertices(v)^^^; ++iter) {
    (*iter)->printC();
  }

Ovenstående kan kompilere men er ikke korrekt, fordi der står noget forkert mellem ^^^ ^^^, og det giver segmentation fault
Spørgsmålet er nu, hvordan jeg retter det til så jeg kan skrive etEllerAndet.end() i stedet for....
Avatar billede corona10 Nybegynder
25. november 2004 - 12:53 #1
OK, jeg kunne så udskifte for-løkken med
while(*iter) {
(*iter++)->printC();
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester