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

matthias

Alter Hase

  • »matthias« ist der Autor dieses Themas

Beiträge: 449

Wohnort: wipperfürth

  • Private Nachricht senden

1

22.01.2006, 00:13

WIP/FAQ 2Darray

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
template <class T>
class array2D
{
public:
    class row
    {
    public:
        int spalte;
        array2D<T>& a;
        row(array2D<T>* a, int spalte): a(*a), spalte(spalte){}
        T& operator[](int zeile)
        {
            return a.select(spalte, zeile);
        }
    };

    array2D(int width, int height): width(width), height(height), array(new T[width*height]){}

    int getWidth(){return width;}
    int getHeight(){return height;}

    T& select(int spalte, int zeile){return array[zeile*width+spalte];}

    row operator[](int spalte)
    {
        return row(this, spalte);
    }

    bool operator =(array2D<T>& a)
    {
        if(a.getWidth() >= width && a.getHeight() >=height)
        {
            for(int i=0; i<height; i++)
                for(int j=0; j<width; j++)
                {
                    array[i*width+j] = a[j][i];
                }
            return true;
        }
        return false;
    }

    void draw()
    {
        for(int i=0; i<height; i++)
        {
            for(int j=0; j<width; j++)
                std::cout << array[i*width+j];
            std::cout << std::endl;
        }
    }

private:
    T* array;
    int width;
    int height;
};

darf erweiter/verbessert werden :-D (z.b. zugrifsüberprüfung/exceptions)
edit: draw war nur zum debuggen -.-

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

2

22.01.2006, 00:45

Ich weiß nicht ob es nur mir so geht, aber das sieht mir verdächtig nach overkill aus. Was genau willst du eigentlich bezwecken, welche Sachen willst du mit dem Array machen usw.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

matthias

Alter Hase

  • »matthias« ist der Autor dieses Themas

Beiträge: 449

Wohnort: wipperfürth

  • Private Nachricht senden

3

22.01.2006, 01:01

ein zweidimensionales array.

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

4

22.01.2006, 11:05

Dafür gleich eine Klasse zu schreiben die gleich mehrere Funktionsaufrufe verbraucht, ist da glaube ich nicht der Königsweg.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Anonymous

unregistriert

5

22.01.2006, 11:22

Nox
Nee also es ist wirklich sehr viel Overkill für nichts, der ebenfalls noch sehr viel Overhead erzeugt!


matthias
Also ich frag mich wieso Du kein unsigned benutzt, haste schonmal negative größen gesehen? Also ich kann mich mit Deiner Klasse nicht mal ansatzweise anfreunden. Meine gefällt mir da viel besser :-D

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
template<typename T> class array2d 
{ 
public: 
    array2d (unsigned long rows, unsigned long cols) : rows_(rows), cols_(cols), data_(new T[rows*cols])
    {} 

    ~array2d (void) 
    { delete [] data_; } 

    inline T* operator[] (unsigned long line) 
    { return (&data_[line * cols_]); } 

private:
    T*            data_; 
    unsigned long rows_;
    unsigned long cols_; 
};


Viel besser!

matthias

Alter Hase

  • »matthias« ist der Autor dieses Themas

Beiträge: 449

Wohnort: wipperfürth

  • Private Nachricht senden

6

22.01.2006, 13:16

ist was dran ^^

overkill finde ich das nicht :]

Anonymous

unregistriert

7

22.01.2006, 13:57

matthias
Naja, also es ist sehr "unelegant" gelöst sagen wir es so. Dazu produziert es sehr viel Overhead. Zu meinem operator []: geh mal mit dem Debugger drüber ;)

matthias

Alter Hase

  • »matthias« ist der Autor dieses Themas

Beiträge: 449

Wohnort: wipperfürth

  • Private Nachricht senden

8

22.01.2006, 15:08

meinst du generell oder meine klasse?

Anonymous

unregistriert

9

22.01.2006, 15:15

hä?

matthias

Alter Hase

  • »matthias« ist der Autor dieses Themas

Beiträge: 449

Wohnort: wipperfürth

  • Private Nachricht senden

10

22.01.2006, 15:46

warum findest du eine klasse für ein 2dimensionales array overkill?

Werbeanzeige