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

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

11

29.11.2009, 17:18

Ich bezweifle stark, dass sich hier ein tuple eignet..

Er will ja offensichtilch eine dynamische Anzahl von Werten gleichen Types. Und ein tuple ist da nicht gerade dazu gedacht.. ;)

@Genro:
Ja. Genau das macht es. Es fügt ein Element an das Ende des vectors an. Was verstehst du daran nicht? Stell dir einfach dazu vor, dass du ein Array hast und jetzt kannst du das Array mit push_back vergrössern, indem du ein Element anfügst. Ein Array, wie es in C++ eingebaut hat ja immer die gleiche Grösse, dass heisst man kan sie zur Laufzeit nicht vergrössern, sondern muss die Grösse zur Kompilerungszeit angeben. Ein std::vector gibt dir jetzt die Möglichkeit das ganze dynamisch zu halten.

Bsp:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
#include <vector>
#include <iostream>

int main ()
{
std::vector<int> v; // leerer vector v mit integern drin. Grösse: 0

v.push_back ( 2 ); // füge eine 2 in den vector ein. Grösse: 1

v.push_back ( 5 ); // füge eine 5 in den vector ein. Grösse: 2


std::cout << v[0]; // gib erstes Element aus

std::cout << v[1]; // gib zweites Element aus

}


EDIT:
Ich habe oben noch die Grösse angefügt.
Um abzufragen wie Grosse denn ein vector ist, kannst du die Memberfunktion size() benutzen.

12

29.11.2009, 17:20

Stell dir einen Vector mal als Schlange vor

Data1 --- Data2 --- Data3

nach vector.push_back(Data4)

Data1 --- Data2 --- Data3 --- Data4

also siehst du, die Schlange hat sich dynamisch vergrössert.

Das ist die Eigenschaft eines Vectors. Er ist so wie ein dynamisches Array. Du kannst (fast) beliebig viele Objekte hinzufügen, wegnehmen, verschieben, ....

EDIT: Zu spät

z.Thema Tuple. War nur als Anmerkung gedacht, wo wirs doch gerade von Containern hatten. Klar eignet sich Tuple für diesen Speziellen zweck nicht so gut.

Haxx0r

Treue Seele

Beiträge: 209

Wohnort: Da!

Beruf: Rebell mit aktivem Lebensstil

  • Private Nachricht senden

13

29.11.2009, 17:25

Zitat von »"E122"«

boost::tuple sollte man auch nicht verachten

Was willste denn mit boost::tuple?

EDIT:
Zu spät geantwortet, sind ja schon wieder 2 neue Posts da.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

14

29.11.2009, 17:52

Zitat

z.Thema Tuple. War nur als Anmerkung gedacht, wo wirs doch gerade von Containern hatten. Klar eignet sich Tuple für diesen Speziellen zweck nicht so gut.

Dann müsste man aber auch noch Liste, Bäume, Hash Tables, Stacks, Queues usw. nennen. ;)

15

29.11.2009, 17:55

Zitat

Dann müsste man aber auch noch Liste, Bäume, Hash Tables, Stacks, Queues usw. nennen. Wink

Ist damit ja schon geschehen ;)

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

16

29.11.2009, 17:57

Zitat von »"E122"«

Zitat

Dann müsste man aber auch noch Liste, Bäume, Hash Tables, Stacks, Queues usw. nennen. Wink

Ist damit ja schon geschehen ;)

Naja. Da gibts im usw. noch eine Menge mehr. ;)

Aber das gehört jetzt nicht in dieses Thread..

17

29.11.2009, 17:58

Ok, ich glaub ich habs kappiert nur gibt da noch ein problem,
undzwar wenn ich das so benutze:

C-/C++-Quelltext

1
2
3
4
    std::vector<sf::Sprite> SStein;
    std::vector<sf::Sprite> SHeld;
    std::vector<sf::Sprite> SBaum;
    std::vector<sf::Sprite> SMonster;

und dann

C-/C++-Quelltext

1
App.Draw(SHeld.push_back());

so mit Push_back was hinzufügen will kann ich erstens
const sf::Sprite nicht in ein int (oder sonstiges) konventieren
und ganz ehrlich was soll ich denn dan ran setzen?
Ich wollte ja nur mit dem Array erreichen das ich mir
nicht die schreib anstrengungen also:
sf::Sprite Bild1(Bild);
sf::Sprite Bild2(Bild);
mache. Hab jetzt verstanden wozu
es gut ist, habs auch mit einem Konsolen programm
versucht. Nur verstehe ich nicht wirlich was das mir
bei meinem Problem helfen soll... :oops:

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

18

29.11.2009, 18:00

Zitat

C-/C++-Quelltext

1
App.Draw(SHeld.push_back());


Was macht das überhaupt für einen Sinn?

Sollte das nicht eher sowas hier sein:

C-/C++-Quelltext

1
App.Draw( SHeld[0] );// zeichne erstes Sprite von SHeld

19

29.11.2009, 18:05

Wäre da nicht

C-/C++-Quelltext

1
App.Draw( SHeld.at(0) );// zeichne erstes Sprite von SHeld


besser ?

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

20

29.11.2009, 18:13

Wenn du die checks nicht vorher machst, dann ja. Obwohl ich bezweifle, dass man einen gescheiten Aufruf machen kann, wenn man die Bounds nicht kennt. ;)

Ich finde eigentlich, dass da die exception durchaus auch im []-Operartor geworfen werden sollte, und man dann halt per Compiler Einstellunge steuern kann. Da 2 Funktionen zu haben finde ich ein wenig ungeschickt..

Werbeanzeige