Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Doppelt verkette Liste

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
20.06.2010, 00:28 Uhr
Mr.Giggity



Hallo Leute,

Erstmal tolles Forum hier mit jeder menge nette leute hier. Hat mit schon viel weitergeholfen.
Dafür erstmal Vielen Dank !

Nun zu meiner eigentlichen Frage:

Ich habe eine Doppelt verkette Liste, in der ich der Mitte ein Element ausgeben möchte.
Meine erster Anlauf das ganze über einen Iteror zu machen hat nicht funktioniert.
Irgendwie konnte ich den Zeiger nicht derefenzieren. Kennt jemand eine andere Möglichkeit ?

Hier mal zu hilfe der Programmauszug:


C++:
#include<iostream>
#include <list>
using namespace std;
int main() {
list<double>::iterator it1;
list<double> myList;
myList.push_back(10);
myList.push_back(11);
myList.push_back(12);

it1 = myList.begin();
advance (it1,1);

cout << myList.front()<< endl;
cout <<myList.back()<<endl;
    cin.get();
    return 0;
}




Vielen Dank für eure Hilfe
Mfg Mr.Giggity

Dieser Post wurde am 22.06.2010 um 14:28 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
20.06.2010, 02:41 Uhr
0xdeadbeef
Gott
(Operator)



C++:
cout << *it << endl;


Allerdings - wenn du random access brauchst und trotzdem in (meistens) konstanter Zeit am Anfang und Ende einfügen können willst, bietet sich std::deque an:

C++:
#include <deque>

std::deque<double> foo;

foo.push_back(10);
foo.push_back(11);
foo.push_back(12);

std::cout << foo[1] << std::endl;


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 20.06.2010 um 02:54 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
20.06.2010, 12:57 Uhr
Mr.Giggity



Hallo 0xdeadbeef

Ich hätte nicht erwartet, dass jemand noch so spät meine Frage beantwortet.
Dafür erstmal vielen dank für deine schnell Hilfe.

Auf die Lösung über deque bin ich zuerst garnicht gekommen.
Und das mit dem dereferenzieren klappt jezt auch.

mfg Mr.Giggity
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
21.06.2010, 23:27 Uhr
Mr.Giggity



Hi

Ich hätte nochmal eine kurze Frage zu den doppelt verketteten listen.

Wie müsste ich bei der oben gestellten Frage vorgehen, wenn die Liste aus Objekten bestehen würde ?
In meinem Fall besteht ein Objekt aus einer Zahl und einem Zeichen.

Kann ich den Iteraotor direkt auf eine der Zahlen oder Zeichen zeigen lassen und dann dereferenzieren ?

Vielen dank für eure Hilfe
Mr.Giggity
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
22.06.2010, 08:11 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja das geht komplett analog:


C++:
struct objekt
{
  int zahl;
  char zeichen;
};

std::deque<objekt> foo;

std::deque<objekt>::iterator it = foo.begin();

std::cout << it->zahl << " " << it->zeichen << std::endl;
// bzw
std::cout << (*it).zahl << " " << (*it).zeichen << std::endl;


--
class God : public ChuckNorris { };

Dieser Post wurde am 22.06.2010 um 08:11 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
22.06.2010, 08:30 Uhr
0xdeadbeef
Gott
(Operator)


Du kannst natürlich auch einen Zeiger auf die Elemente nehmen, etwa

C++:
int *p = &it->zahl;


oder einen Memberzeiger benutzen:

C++:
int object::*mp = &object::zahl;

// ...
it->*mp; // entspricht it->zahl


oder einen Wrappertyp um den Iterator schreiben, der den Werttyp auf zahl mappt (das darfste aber selbst machen). Üblicherweise reicht es aber, den ganzen Aufriss sein zu lassen und it->zahl direkt zu benutzen.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
22.06.2010, 18:02 Uhr
Mr.Giggity



Hi

Danke jetzt klappt alles so wie es soll

Aber ein Frage hätte ich trotzdem noch. Wenn ich in einer Liste die wie oben aus Objekten befüllt ist ein Element abändern möchte z.B eine Zahl. Gibt es dann ein Möglichkeit dies über einen Iterator zu machen ? Oder muss ich dafür das komplette Objekt aus der Liste entfernen und dann das abgeänderte einfügen ?

Mfg Mr.Giggity
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
22.06.2010, 18:15 Uhr
0xdeadbeef
Gott
(Operator)



C++:
it->zahl = neuer_wert;


Du musst halt nur darauf achten, dass du dafür einen container::iterator und keinen container::const_iterator benutzt.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 22.06.2010 um 18:16 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: