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

21

04.02.2009, 23:51

Bei std::list und den assoziativen Containern bleiben Zeiger, Referenzen und Iteratoren auf Elemente gültig, weil intern ja nur Zeiger gespeichert werden. Bei std::vector und std::deque kommen Array-ähnliche Strukturen vor, die zum Teil Umkopieren erfordern...

22

05.02.2009, 15:54

Zitat von »"Nexus"«

std::vector und std::deque

ist std::deque nicht n verkappter std::vector?
btw: ich würde sagen, map oder vector. denn er will die gegner offensictlich indizieren, und ich denke, ein index soll dann auch durchgehend auf den selben gegner verweisen, also würde ich sagen, wenn die gegner soweiso in irgendeiner Form während der ganzen Spieldauer erhalten bleiben (und sei es meinetwegen nur als Mehrweg-Instanzen), vector, weil er dann einfach den schnellsten Random Access bietet, ansonsten map, weil da die IDs erhalten bleiben, unabhängig davon, wie die technischen indieces aussehen.

killmichnich

unregistriert

23

05.02.2009, 18:14

hey also ich hab gleich nochmal n kleines problem mit dem iterator.
vllt könnt ihr mir da auch helfen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
struct waffe { ..};
map<int, waffe>waffen;
map<int, waffe>::iterator waffenit;

dann machich so einträge in die map:

for(int i=1; ...; i++)
{
waffe waffe1;
waffe1. .... = ...; usw ...
waffen[i]=waffe1;
}

anschließend bräuchte ich das ende der map, das mach ich so:

waffenit=waffen.end();

und dann wär ja der letzte eintrag:

waffenit->first;

oder?

ich mach da 3 eintrgäge, wenn ich das aber so abfrag, sind da sehr sehr viele drin(1 000 000 000 ...)
was machich da falsch?

MfG

24

05.02.2009, 18:23

end ist das Element hinter dem letzten. Das brauchste um von begin zu end durchgehen zu können und alle erwischt zu haben.
Es gibt aber auch rend und rbegin um das letzte und das Element vor dem ersten anzusprechen.
Lieber dumm fragen, als dumm bleiben!

killmichnich

unregistriert

25

05.02.2009, 18:59

also mit dem rend und rbegin hab ichs zwar nich so geblickt (...) aber ich hab ne andre lösung gefunden: map::size(), ganz simpel :D

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

26

05.02.2009, 19:26

Zitat

ist std::deque nicht n verkappter std::vector?

Muss nicht sein. Ich denke mal, dass du da etwas mit einem Container Adapter verwechselt, welche lediglich ein Wrapper um einen Container sind.

Zitat

Es gibt aber auch rend und rbegin um das letzte und das Element vor dem ersten anzusprechen.

rend und rbegin sind aber für einen anderen Zweck da.. :roll:
Wenn man einen Iterator auf das letzte Element haben will, kann man gut end nehmen und dann einfach dekrementieren. Ausser man will wirklich den Container rückwärts durchgehen, dann ist da rend/rbegin schon die bessere Wahl.

27

05.02.2009, 22:10

Zitat von »"PCShadow"«

Zitat von »"Nexus"«

std::vector und std::deque

ist std::deque nicht n verkappter std::vector?
Kommt drauf an, was du unter "verkappt" verstehst. Meistens ist std::deque als Array von Arrays implementiert. Dadurch ist die Speicherverwaltung etwas vorteilhafter, da bei grösseren Containern nie eine ganze Sequenz reallokiert werden muss. Zudem können Elemente normalerweise auch in konstanter Zeit vorne angehängt und gelöscht werden.

Zitat von »"killmichnich"«

also mit dem rend und rbegin hab ichs zwar nich so geblickt (...) aber ich hab ne andre lösung gefunden: map::size(), ganz simpel :D
Naja, du versuchst einfach, die Funktionalität eines std::vectors auf eine std::map zu übertragen. Ich glaube nicht, dass du deren Vorteile ausnutzt, wodurch ein std::vector wahrscheinlich besser geeignet wäre.

Und das mit dem size() ist ziemlich unflexibel, das funktioniert nämlich nicht mehr, sobald die Indizes nicht mehr alle nacheinander folgen. Um Container einheitlich zu durchlaufen, gibt es das Iteratorenkonzept. So kann man auch relativ leicht den Container auswechseln, ohne dass man gross Code ändern muss.

Werbeanzeige