qlisten
qlisten
Hallo liebe Leute ,
ich hätte da mal eine Frage zu QListen.
Und zwar will ich wissen ob man die listen mit dem index 0 beginnend iteretieren kann.
Greiffe ich mit qliste.at(0) auf das erste Element einer Liste oder eher mit qliste.at(1) ?
vielen dank
douala
ich hätte da mal eine Frage zu QListen.
Und zwar will ich wissen ob man die listen mit dem index 0 beginnend iteretieren kann.
Greiffe ich mit qliste.at(0) auf das erste Element einer Liste oder eher mit qliste.at(1) ?
vielen dank
douala
C++ generell ist 0 basierend. Also alle indizies beginnen mit 0 ...
Die QContainer machen da keine Ausnahme.
generell solltest du aber indizies meiden (und iteratoren verwenden) wenn du kannst.
wenn du nicht kannst, du also den direkten zugriff auf das Xte element brauchst, solltest du den einsatz eines QVectors/QByteArrays erwaegen.
Ciao ...
Die QContainer machen da keine Ausnahme.
generell solltest du aber indizies meiden (und iteratoren verwenden) wenn du kannst.
wenn du nicht kannst, du also den direkten zugriff auf das Xte element brauchst, solltest du den einsatz eines QVectors/QByteArrays erwaegen.
Ciao ...
Evt. solltest du noch schreiben warum du die in der Doku als "very fast" (http://doc.qt.nokia.com/4.6/qlist.html#at) bezeichneten Methoden generell nicht verwendest sondern Iteratoren empfiehlst, zu welchen die Trolls schreiben: "In practice, these are rarely used, because you can use indexes into the QList" (http://doc.qt.nokia.com/4.6/qlist.html#details)...RHBaum hat geschrieben: generell solltest du aber indizies meiden (und iteratoren verwenden) wenn du kannst.
Das sollte eigentlich alles beantworten.const T & QList::at ( int i ) const
Returns the item at index position i in the list. i must be a valid index position in the list (i.e., 0 <= i < size()).
This function is very fast (constant time).
(Vorausgesetzt douala mein mit QListen eine QList)
Außerdem ist ein Iterator eigentlich die bessere Zugriffsmethode, da dieser genau dafür optimiert ist. (und bei QList ist der Iterator und at() gleich schnell)
@solarix
Ich verwende QList schon ab und an, aber an Stellen wofuer sie eigentlich auch super praktisch ist. Und das ist fast ausschliesslich in verbindung mit ItemModels.
Ansonsten bin ich, wie scho oft angedeutet, c++ Entwickler und kein QT Entwickler ^^ Der Unterschied iss vielleicht klein, aber fein
Das heisst ich steh auf Standards, und die QT ist kein Standard.
In der STL gibt es nix vergleichbares zu QList. Wenn man sich bissi mit den Techniken und Hintergründen auseinandersetzt, weiss man auch warum.
und "very fast" iss alles andere als ne zusicherung die ner c++ Kommision standhalten würd ^^
Worum es mir geht, iss halt gleich jeglichen Code in der Art:
gleich im Keim zu ersticken.
Kein Problem wenn Anfänger / Einsteiger das zu Beginn Ihrer C++ Karriere noch schreiben, weil sie es ned besser wissen.
Aber spaetestens wenn wer Versucht das zu verteidigen, sollt er sich doch Fragen, ob er bei ner anderen Programmiersprache ned besser aufgehoben iss.
Ciao ...
Ich verwende QList schon ab und an, aber an Stellen wofuer sie eigentlich auch super praktisch ist. Und das ist fast ausschliesslich in verbindung mit ItemModels.
Ansonsten bin ich, wie scho oft angedeutet, c++ Entwickler und kein QT Entwickler ^^ Der Unterschied iss vielleicht klein, aber fein
Das heisst ich steh auf Standards, und die QT ist kein Standard.
In der STL gibt es nix vergleichbares zu QList. Wenn man sich bissi mit den Techniken und Hintergründen auseinandersetzt, weiss man auch warum.
und "very fast" iss alles andere als ne zusicherung die ner c++ Kommision standhalten würd ^^
Worum es mir geht, iss halt gleich jeglichen Code in der Art:
Code: Alles auswählen
for(int i = 0; i < myQList.size(); ++i)
{
/// tu irgendwas mit myQList.at(i)
}
Kein Problem wenn Anfänger / Einsteiger das zu Beginn Ihrer C++ Karriere noch schreiben, weil sie es ned besser wissen.
Aber spaetestens wenn wer Versucht das zu verteidigen, sollt er sich doch Fragen, ob er bei ner anderen Programmiersprache ned besser aufgehoben iss.
Ciao ...
Hey, da muss ich doch mal was ganz dummes Fragen. Programmiere privat seit eingen Jahren C/C++ und durchlaufe meine Vectoren immer in Schleifen mit dem Indexzugriff.
Nun die dumme Frage. Wozu braucht man Iteratoren? Habe schon so viele Leute gefragt und überlegt und komm einfach nicht drauf.
Vllt. hat jemand die Gedult und mag etwas dazu sagen.
Nun die dumme Frage. Wozu braucht man Iteratoren? Habe schon so viele Leute gefragt und überlegt und komm einfach nicht drauf.
Vllt. hat jemand die Gedult und mag etwas dazu sagen.
@RHBaum: Ich wollte keine Grundsatzdiskussion vom Zaun brechen sondern lediglich zu einer Aussage eine Begründung
Zum einen weil das in einem Forum dazugehört und zum anderen weil ich anderer Meinung bin.. zur Vervollständigung noch meine Argumente:
- ein kleiner Benchmark ergab mir mal, dass die QList-Indexe mindestens gleich schnell sind wie Iteratoren.
- Wenn es zu einer Lösung zwei gleichwertige Varianten gibt ziehe ich die lesbarere vor (ich mag diesen Template-Iterator-Code nicht
)
Daher bin ich der gleichen Meinung wie die Trolls (STL-Style für die STL-Fans, Java-Style für die Java-Fans, Indexe für den Rest... wenn es um die blosse Traversierung geht).
Das ist nun aber OT... bin via PN gerne bereit weiter darüber zu diskutieren.
Zum einen weil das in einem Forum dazugehört und zum anderen weil ich anderer Meinung bin.. zur Vervollständigung noch meine Argumente:
- ein kleiner Benchmark ergab mir mal, dass die QList-Indexe mindestens gleich schnell sind wie Iteratoren.
- Wenn es zu einer Lösung zwei gleichwertige Varianten gibt ziehe ich die lesbarere vor (ich mag diesen Template-Iterator-Code nicht
Daher bin ich der gleichen Meinung wie die Trolls (STL-Style für die STL-Fans, Java-Style für die Java-Fans, Indexe für den Rest... wenn es um die blosse Traversierung geht).
Das wär aber schade! Ein kurzer Blick in die QtCore-Sourcen zeigt, dass dann verdammt viele Entwickler bei Nokia abwandern müsstenAber spaetestens wenn wer Versucht das zu verteidigen, sollt er sich doch Fragen, ob er bei ner anderen Programmiersprache ned besser aufgehoben iss.
Das ist nun aber OT... bin via PN gerne bereit weiter darüber zu diskutieren.
Eine kleine Zusammenfassung, was es für Iteratoren gibt:kater hat geschrieben:Nun die dumme Frage. Wozu braucht man Iteratoren? Habe schon so viele Leute gefragt und überlegt und komm einfach nicht drauf.
http://www.cplusplus.com/reference/std/iterator/
Der Nutzen? Es ist vor allem mit allgemeinen (also templates) Algorithmen eine super Möglichkeit, eine Datenstruktur durchzuwandern. Problem ist, dass nicht jeder Container einen Random Access Iterator
Mittlerweile stehen die Programmierer aber mehr auf Ranges, da noch besser und vor allem intuitiver und weniger unleserlicher Code-Bloat.
Wenn du mal Zeit hast - lohnt sich
Danke schonmal. Ja ich denke ich seh den Grund.
Ich hab mein leben Lang noch nie was anderes als den std::vector gebraucht (Jetzt ist es halt QVector). Von den Algos höchstens mal die sort() Funktion.
Die std bietet so viel, und ich brauch es einfach nicht.
Irgendwie sind meine Programme zu einfach aufgebaut. Und wenn es mal kompliziert wird, dann muss ich die Algorythmen selbst schreiben, da es sie schlicht einfach nicht gibt.
Ich hab mein leben Lang noch nie was anderes als den std::vector gebraucht (Jetzt ist es halt QVector). Von den Algos höchstens mal die sort() Funktion.
Die std bietet so viel, und ich brauch es einfach nicht.
Irgendwie sind meine Programme zu einfach aufgebaut. Und wenn es mal kompliziert wird, dann muss ich die Algorythmen selbst schreiben, da es sie schlicht einfach nicht gibt.
@Kater
Es kommt auch wirklich drauf an, auf welchen Level man programmiert.
Das ist jetzt nicht abwertend gemeint, nicht falsch verstehen !
Ausserdem kosten Scriptentwickler ned so viel aufm Arbeitsmarkt ...
Kommst du mal in die Situation, Bibliotheken oder nen Systemunterbau fuer nen groesseres System bauen zu muessen, sieht die Welt komplett anderes aus ^^
Dort spielen Performance, Ressourcenverbrauch, und vor allem Seiteneffektfreiheit / Multithreadfaehigkeit ne ganz andere Rolle, gegenueber den Entwicklungskosten (aka Kosten fuer den Programmierer).
Ciao ...
Es kommt auch wirklich drauf an, auf welchen Level man programmiert.
Das ist jetzt nicht abwertend gemeint, nicht falsch verstehen !
Das ist soweit ok, solange Du bei Toolentwicklung, oder reiner GUI-Entwicklung bleibst. Wobei Dirn "richtiger Proejktleiter" immer vorhalten wird, das man mit "einfacheren Sprachen" im Schnitt 20-30% schneller zu ergebnissen kommtIch hab mein leben Lang noch nie was anderes als den std::vector gebraucht (Jetzt ist es halt QVector).
Ausserdem kosten Scriptentwickler ned so viel aufm Arbeitsmarkt ...
Kommst du mal in die Situation, Bibliotheken oder nen Systemunterbau fuer nen groesseres System bauen zu muessen, sieht die Welt komplett anderes aus ^^
Dort spielen Performance, Ressourcenverbrauch, und vor allem Seiteneffektfreiheit / Multithreadfaehigkeit ne ganz andere Rolle, gegenueber den Entwicklungskosten (aka Kosten fuer den Programmierer).
Ciao ...
1) Egal was du machst, der Standard sollte dich interessieren. Er schreibt dir vor was gültiges C++ ist und was nicht.kater hat geschrieben:JSolange man nur für sich selbst Programm schreibt, oder mal als Visualisierungshilfe für Daten mit denen man auf der Arbeit arbeitet, dann schert mich auch kein StandardHauptsache die Algos sind sau schnell.
2) Wenn deine Algos immer sau schnell sind, solltest du vllt. den Beruf wechseln und C++-Optimierer werden
Im Ernst: Wenn die Algorithmen nicht allgemein gehalten werden können und auch außerhalb des Kontext wenig Sinn machen, ist es OK keine allgemeine Schnittstelle (über z.B. Iteratoren als Template-Paramater) anzubieten.
Ansonsten solltest du das mal versuchen
Ne, die Algos sind immer vom Problem abhänig. In meinem jetzigen Nebenjob optimiere ich auch einen Algo, also passt schon 
Mein letztes Kunstwerk passt eine Hilberkurve in ein unstruktoriertes, ungleichmäßiges Netz an. Das ist alles andere als allgemein
Ich kann eine Datenstuktur anbieten und eine Dokumentation was sie bedeutet.
Aber das ist alles andere als die Container in der std.
Mein letztes Kunstwerk passt eine Hilberkurve in ein unstruktoriertes, ungleichmäßiges Netz an. Das ist alles andere als allgemein
Aber das ist alles andere als die Container in der std.
durchlaufe meine Vectoren
könntest du dir vorstellen, dass ein algo zigmal schneller werden könnte, wenn nicht alle daten zwingend in einem block (vector) liegen ?Ich kann eine Datenstuktur anbieten und eine Dokumentation was sie bedeutet.
spaetestens wenn nicht mehr mit vector arbeitest, wirst iteratoren brauchen ...
Ciao ...