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

11

11.09.2011, 22:51

Och, beim Hobby Projekt stört ihn das sicher noch nicht. Und solang es für ihn einfacher ist :)
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Raidenkk

Treue Seele

  • »Raidenkk« ist der Autor dieses Themas

Beiträge: 151

Wohnort: Bergkamen/Oberaden

Beruf: Multimedia Informatik

  • Private Nachricht senden

12

12.09.2011, 10:55

Ich habe es jetzt mit Vector versucht. Doch auch hier habe ich ein bisschen Probleme mit den Übergeben von Parametern.
Ich hoffe mir kann da jemand weiterhelfen.

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
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
#include <vector>

using namespace std;

// Prototypen
void Map_Initialisieren (vector<vector<int> > *map, vector<vector<int> >::iterator *i);

int main ()
{
    vector<vector<int> > map(12,12);
    vector<vector<int> >::iterator i;
    
    Map_Initialisieren (&map, &i);

    // Ausgeben
    for (int y=0; y<map.size(); y++)
    {
        for (int x=0; x<map.size(); x++)
        {
            cout << map[x][y];
        }
        cout << endl;
    }

    return 0;
}

// Map_Initialisieren
void Map_Initialisieren (vector<vector<int> > *map, vector<vector<int> >::iterator *i)
{
    for (int y=0; y<map->size(); y++)
    {
        for (int x=0; x<map->size(); x++)
        {
            i[x][y].push_back(1);
        }
    }
}

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

13

12.09.2011, 11:03

C-/C++-Quelltext

1
(*i)[x][y].push_back(1);

oder einfach ne Referenz übergeben(ist auch weniger Fehleranfällig weil du nicht, nichts übergeben kannst) ;)

C-/C++-Quelltext

1
vector<vector<int> > &map


Das nächste mal vielleicht ne Fehlermeldung mit posten :D

edit: Was hier passiert ist nicht wirklich eindeutig

C-/C++-Quelltext

1
vector<vector<int> > map(12,12);

Ich würd die inneren Vectoren lieber manuell initialisieren.
"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?

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

14

12.09.2011, 11:04

Warum erzeugst du dir nicht einen Iterator in der Funktion?
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Raidenkk

Treue Seele

  • »Raidenkk« ist der Autor dieses Themas

Beiträge: 151

Wohnort: Bergkamen/Oberaden

Beruf: Multimedia Informatik

  • Private Nachricht senden

15

12.09.2011, 11:50

Ich wollte sie zum üben als Parameter übergeben^^.

Danke NachoMan ich habe sie als Referenz übergeben und es scheint zu Funktionieren :)

Fireball

Alter Hase

Beiträge: 415

Wohnort: Werne

Beruf: Dipl. Inf.

  • Private Nachricht senden

16

12.09.2011, 14:47

Ich bin immer noch der Meinung keine 2D Array's und das ganze gehampel zu verwenden. Einfach alles in einem 1D Array und fertig.

Siehe: http://en.wikipedia.org/wiki/Row-major_order

row * NUMCOLS + col = index

Bitte beachten, dass das Array bei 0 anfängt und schon kann es losgehen:

{code}
123
456
789
{code}

wir wollen an den Wert 6, also Map[2][3]

1 * 3 + 2 = 5 (Index)


Map[3][2]

2 * 3 +1 = 7

usw.

In einer Business Anwendung würde ich das natürlich auch nicht so machen, weil es billiger ist nen fetteren Server hinzustellen, als den Code zu optimieren.

Gruß

Fb

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Fireball« (12.09.2011, 14:53)


Raidenkk

Treue Seele

  • »Raidenkk« ist der Autor dieses Themas

Beiträge: 151

Wohnort: Bergkamen/Oberaden

Beruf: Multimedia Informatik

  • Private Nachricht senden

17

14.09.2011, 08:12

ja jetzt habe ich es raus :)

Fireball

Alter Hase

Beiträge: 415

Wohnort: Werne

Beruf: Dipl. Inf.

  • Private Nachricht senden

18

22.09.2011, 13:28

Hab auch noch was

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
using namespace std;

#define HEIGHT 5
#define WIDTH 5

void printMap(int** mapPtr, int x, int y){
    for(int i=0; i < x; ++i){
        for(int j=0; j < y; ++j){
            printf("%d",mapPtr[i][j]);
        }
        printf("\n");
    }
}

int main(){

    int** map;

    // Allocate memory
    map = new int*[HEIGHT];
    for (int i = 0; i < HEIGHT; ++i){
        map[i] = new int[WIDTH];
    }

    // Add values
    for(int j=0; j< HEIGHT; ++j) {
        for(int k=0; k< WIDTH; ++k) {
            map[j][k] = j;
        }
    }

    printMap(map,HEIGHT,WIDTH);

    // Array löschen
    for(int l=0; l<=4; ++l) {
        delete[] map[l]; 
    }
    delete[] map;

    cin.get();
    return 0;
}

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »Fireball« (22.09.2011, 16:18) aus folgendem Grund: update


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

19

22.09.2011, 13:36

Ich hoffe dir ist klar, dass das nur nicht abstürzt, weil du in deinen Funktionen nicht die brutal gecasteten mapPtr verwendest, sondern die globale Variable map...

Fireball

Alter Hase

Beiträge: 415

Wohnort: Werne

Beruf: Dipl. Inf.

  • Private Nachricht senden

20

22.09.2011, 15:35

So ich habe es mal berichtigt - peinlich peinlich :wacko:

Schön ist so etwas jedoch nicht, eine eigene Container Klasse ist meiner Meinung nach schon fast Pflicht.


Gruß

Fb

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Fireball« (22.09.2011, 16:17)


Werbeanzeige