[C++] lists

Pagina: 1
Acties:

  • mandroid
  • Registratie: Juli 2002
  • Laatst online: 01-02 07:50
Ik heb een list gemaakt van lists van ints :
list< list <int> >

Nu wil ik op een bepaald moment in mn programma het i'de element uit deze lijst opvragen.

In de lessen programmeren hebben we echter nog niks gezien ivm het gebruik van lists, na een beetje gegoogle dacht ik wel een oplossing gevonden te hebben :
code:
1
2
3
4
5
6
7
std::list<int> springNaarLijst(std::list<std::list<int> > A, int index){
    std::list<std::list<int> >::iterator temp = A.begin();
    for(int i=0;i<index;i++){
        temp++;
    }
    return *temp;
}

deze functie zou dus de list<int> op plaats 'index' moeten teruggeven, dat doet hij blijkbaar niet, maar ik zie niet in wat er zou verkeerd aan zijn.
Iemand die kan helpen ?

  • _Squatt_
  • Registratie: Oktober 2000
  • Niet online
Allereerst geef je een kopie van de std::list<int> terug, niet een reference. Je functie zou er zo uit moeten zien (de '&' is toegevoegd):
C++:
1
std::list<int> &springNaarLijst( std::list<std::list<int> > A, int index)


Verder zou op het eerste gezicht je functie moeten werken. Overigens lijkt het me beter om een std::vector te gebruiken als je vaak het i'de element nodig hebt. Een std::list is niet echt gemaakt voor random-acces. Met een std::vector kun je je functie vervangen door:
C++:
1
2
3
std::vector< std::list<int> > v; //wellicht zelfs std::vector< std::vector<int> >
// i'de std::list krijg je met operator[]
std::list<int> tmp = v[i];


--- edit
Ik heb het even getest, maar hier werkt je functie gewoon. Wat gaat er precies fout? Geef je toevallig een te hoge index mee?

En, was ik vergeten, het is netter en geheugenvriendelijker om die list<list<int>> mee te geven als reference:
C++:
1
std::list<int> &springNaarLijst( std::list< std::list<int> > &A, int index)

[ Voor 28% gewijzigd door _Squatt_ op 30-04-2004 23:56 ]

"He took a duck in the face at two hundred and fifty knots."


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Terzijde, ++i is iets sneller dan i++ in dit geval. Dat komt omdat i++ de waarde van de oude i retourneert, en ++i de nieuwe i. In code is i++ dus iets als:
C++:
1
2
3
iterator tmp(this); // copy this
inc(this); // increment this
return tmp; // return old value

en voor ++i gewoon:
C++:
1
2
inc(this);
return this;


(ik bedoel natuurlijk (++)temp(++), de iterator increment)

[ Voor 9% gewijzigd door Zoijar op 01-05-2004 11:55 ]


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
std::advance( iterator, i )

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein