Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

31

11.08.2012, 18:14

In erster Linie ging es um die Klärung der Frage des TE. Eure Diskussion ist eig. ziemlich ausgeufert (jedenfalls denke ich mal wusste der TE oft nicht worum es gerade geht) und insofern hat idontknow keineswegs destruktive Beitrage verfasst -> somit auch kein "getrolle" betrieben.
Zum Zeitpunkt seines Posts war die Diskussion noch längst nicht fertig und seine plumpige Antwort à la "Eure Diskussion ist schwachsinn und ich weiss alles besser: std::array" würde ich schon als getrolle bezeichnen (auch die zwei Edits zeigen, dass er nur schnell etwas hingeschrieben hat anstatt sich die Diskussion durchgelesen hat). Hätte er versucht sich in die Diskussion einzuklinken und mit std::array eine gute Alternative vorgeschlagen, hätte das Ganze etwas anderst ausgesehen. ;)

Wie gesagt, in erster Linie geht es um die Frage des TE nicht um irgendeine Diskussion. Da idontknow sich wohl einfach um das primäre Ziel (nämlich der Beantwortung der Frage des TE) gekümmert hat (statt sich in irgendeiner Diskussion einzuklinken, die soweit geht das sie absolut unnütz für den TE und/oder anderen Neulingen auf diesem Gebiet ist) ist sein Beitrag absolut kein getrolle. Alles andere hilfreiche und wesentliche hat ja dot bereits genannt bevor die Diskussion dann wieder einmal in etlichen Beitragen ausartete (nichts gegen dich, ist hier irgendwie immer so).
Sich in eure Diskussion einzumischen war wahrscheinlich niemals sein Ziel. Und letztendlich war seine "Idee" mit str::array ja auch nicht so ganz verkehrt.

P.S.: Du scheinst oft sehr viel mehr (negatives) in irgendwelche Aussagen reinzuinterpretieren, als vllt. nötig und sinnvoll ist.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

32

11.08.2012, 18:24

Wir wärs wenn ein Moderator die Diskussion abspaltet? :thumbsup:
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

eXpl0it3r

Treue Seele

  • »eXpl0it3r« ist der Autor dieses Themas

Beiträge: 386

Wohnort: Schweiz

Beruf: Professional Software Engineer

  • Private Nachricht senden

33

11.08.2012, 19:35

Wie gesagt, in erster Linie geht es um die Frage des TE nicht um irgendeine Diskussion. Da idontknow sich wohl einfach um das primäre Ziel (nämlich der Beantwortung der Frage des TE) gekümmert hat (statt sich in irgendeiner Diskussion einzuklinken, die soweit geht das sie absolut unnütz für den TE und/oder anderen Neulingen auf diesem Gebiet ist) ist sein Beitrag absolut kein getrolle. Alles andere hilfreiche und wesentliche hat ja dot bereits genannt bevor die Diskussion dann wieder einmal in etlichen Beitragen ausartete (nichts gegen dich, ist hier irgendwie immer so).
Sich in eure Diskussion einzumischen war wahrscheinlich niemals sein Ziel. Und letztendlich war seine "Idee" mit str::array ja auch nicht so ganz verkehrt.
Diskussionen entstehen halt einmal einfach so, wenn es dann halt bei einem Post ist, der nichts mit dem Thema zu tun hat, dann wäre es die Aufgabe eines Moderators sein einzumischen und mitzuteilen, dass man nicht Offtopic gehen darf (ich weiss nicht was hier so die Regel ist) oder dieser das Thema halt einfach abspaltet.
Nein idontknows ursprüngliche Ziel mit dem Post "std::tr1::array<std::tr1::array<T, Width>, Height>. So einfach. Diskussion vorbei." war die Diskussion zu beenden, denn den TE spricht er erst in seinem Edit an.
Überiges wo genau liegt jetzt für dich der Sinn, bei dieser Diskussion, welche nicht einmal irgendwie mit dem Thema zu tun hat, dass du diese auf eine kleine, eher spassige Nebenbemerkung von mir anfängst? :hmm:

P.S.: Du scheinst oft sehr viel mehr (negatives) in irgendwelche Aussagen reinzuinterpretieren, als vllt. nötig und sinnvoll ist.
Die Stimmung hier ist auch oft sehr agressiv und öfters negativ als positiv. Das ist meine Meinung, welche sich über die kurze Zeit, seit ich hier bin, gebildet hat, diese wurde aber auch schon von anderen bestätigt.

Wir wärs wenn ein Moderator die Diskussion abspaltet? :thumbsup:
:thumbup:
Blog: https://dev.my-gate.net/
—————————————————————————
SFML: https://www.sfml-dev.org/
Thor: http://www.bromeon.ch/libraries/thor/
SFGUI: https://github.com/TankOs/SFGUI/

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

34

11.08.2012, 20:13

Wollte dich nur anregen vorher zu denken bevor du andere als Trolle o.a. bezeichnest. Sieh es als nette Geste. ;)
Und naja aggressiv. Wer aggressiv ist zudem sind andere sicher nicht weniger aggressiv. Aktion Reaktion und so. Deine vorschnelle negative Einschätzung habe ich aber schon selbst erlebt ohne aggressiv geworden zu sein.

Abspalten wäre längst überfällig. :thumbup:
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

35

12.08.2012, 02:19

Nicht unbedingt, denn da es sich um ein Array statischer Größer handelt, gehört die Größe natürlich zum Typ. Aber gut, noch besser wäre dann also ein std::array.
Interessant dieses extent template struct, aber ist wohl eher eine Symptom Bekämpfung wie eine Lösung, ist aber natürlich am richtigen Ort durch aus notwendig und sicherlich besser als das C idiom, welches ja nicht type-safe ist.

Wieso nur Symptombekämpfung? Und wieso genau ist die Lösung mit sizeof deiner Meinung nach nicht type-safe!?

Wieso er mit den Indices "viel mehr" aufpassen muss, ist mir allerdings nicht ganz klar.
Naja gut alle Container haben das Problem eines underflow oder overflow, von daher muss man überall gleich aufpassen. Mit std::vector<T> hätte man natürlich noch die Möglichkeit .at() zu verwenden, jedoch hat das natürlich auch wieder seine Nachteile.

Naja, du hast schon recht, dass es wohl beim Debuggen unter Umständen leichte Vorteile hat, da man im Debug Build in der Regel autom. Range Checking bekommt. Dazu braucht man aber gar kein at() und das sollte man z.B. bei std::array auch haben...

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (12.08.2012, 02:26)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

36

12.08.2012, 03:15

Ich hab noch einen improvisierten 2d Vector aus einem alten Projekt. Er ist zwar nicht perfekt oder fertig, wird aber für deine zwecke völlig ausreichend sein.
http://pastebin.com/uHU0Gw3w
Einfach iin einen Header kopieren und benutzen.

Kleiner Hinweis: Die Indexberechnung hat wohl einen Bug, sollte imo m_Width * vector.y sein und nicht m_Height * vector.y. ;)

Die Resizemethode ist eigentlich auch nicht dazu gedacht das Feld nachträglich zu vergrößern ohne selbst die Objekte darin zu verschieben. Ich kann ja nicht wissen ob das Feld nach links, rechts, oben, unten oder allen Richtungen vergrößert wird. Daher überlasse ich es den Nutzer ein altes 2D Array in ein neues, größeres zu kopieren. Ich habe die Methode nur erstellt, weil man möglichst einen Standardkostruktor ohne Parameter zur Verfügung stellen sollte und es ohne diese Methode keine Möglichkeit gäbe die größe festzulegen.

Statt dieser resize() Methode könntest du nun einen Move Assignment Operator zur Verfügung stellen:

C-/C++-Quelltext

1
2
3
4
5
6
7
vector2D& operator =(vector2D&& v)
{
  m_Field = move(v.m_Field);
  m_Width = v.m_Width;
  m_Height = v.m_Height;
  return *this;
}

Dann kannst du deinem vector2D einfach (und ohne unnötige Kopien) einen neuen vector2D zuweisen:

C-/C++-Quelltext

1
2
3
4
5
vector2D v bla(10, 12);

// ...

bla = vector2D(42, 23);

Abgesehen davon, würde ich für den Zugriff auch einen () operator überladen, damit man nicht unbedingt auf at() angewiesen ist. Und getWidth() und getHeight() sollten wohl const sein.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »dot« (12.08.2012, 03:23)


NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

37

12.08.2012, 03:56

Kleiner Hinweis: Die Indexberechnung hat wohl einen Bug, sollte imo m_Width * vector.y sein und nicht m_Height * vector.y. ;)

Ohh, du hast recht. Danke. Ich hätte es damals für ein Sudokufeld genutzt und da habe ich den Fehler natürlich nicht bemerkt, weil Höhe und Breite gleich waren. Vielleicht hätte ich doch nocheinmal drüber schauen sollen bevor ich es gepostet habe. Ich ändere es mal.
Dein Vorschlag macht wohl nur mit dem neuen Standard Sinn?
Mir ging es darum eine einfache Lösung zu bieten, die er verstehen kann, die auch mit einem älteren Kompiler funktioniert und wofür er keine riesige Bibliothek wie Boost herunterladen und einrichten muss.
Trotzdem müsste ich mich mal mit dem neuen Standard beschäftigen. Das nächste Buch ist schon vorgemerkt. :D
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »NachoMan« (12.08.2012, 04:05)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

38

12.08.2012, 18:32

Dein Vorschlag macht wohl nur mit dem neuen Standard Sinn?

Jap

Mir ging es darum eine einfache Lösung zu bieten, die er verstehen kann, die auch mit einem älteren Kompiler funktioniert und wofür er keine riesige Bibliothek wie Boost herunterladen und einrichten muss.

Schon klar, ich ging nur davon aus, dass du selbst etwas ähnliches benutzen wirst und dachte mir, dass dein tatsächlicher Code vielleicht davon profitieren könnte. ;)

Trotzdem müsste ich mich mal mit dem neuen Standard beschäftigen. Das nächste Buch ist schon vorgemerkt. :D

Zum Thema rvalue References und Move Semantik gibt's hier eine sehr gute Artikelserie: http://cpp-next.com/archive/2009/08/want…-pass-by-value/

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

39

12.08.2012, 18:45

Dankeschön. :thumbsup:
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Werbeanzeige