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

verrueckt1993

Frischling

Beiträge: 85

Beruf: Informationstechnischer Assistent Fachrichtung AE, 2. Jahr

  • Private Nachricht senden

11

10.01.2011, 10:40

int foo = new int(); geht übrigens auch, so anbei bemerkt...

edit: ich meinte natürlich int* foo.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »verrueckt1993« (14.01.2011, 08:32)


NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

12

10.01.2011, 10:45

nein geht nicht... aber was hat das mit dem thread zutun?^^
"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?

13

11.01.2011, 16:15

Zeiger im Vektor? Doppelt gemoppelt hält besser oder wie?

C-/C++-Quelltext

1
2
for (std::vector<Object>::const_iterator it(objects.begin()), end(objects.end()); it != end; ++it)
    draw_object( *it, true);
... Konstruktor nutzen, nicht jedesmal end aufrufen, Preinkrementieren und dann noch const nutzen (vorausgesetzt die Funktion macht nur das was ihr Bezeichner verspricht), schon siehts gut aus;)

C-/C++-Quelltext

1
2
3
4
5
void Game::drawObjects(std::vector<Objekt> const& objects, const bool flag) 
{ 
    for (std::vector<Object>::const_iterator it(objects.begin()), end(objects.end()); it != end; ++it) 
        drawObject(*it, flag); 
}


C-/C++-Quelltext

1
void Game::drawObject(Objekt const& object, const bool flag) 



bliblablu ...
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

14

11.01.2011, 16:59

Zeiger im Vektor? Doppelt gemoppelt hält besser oder wie?

Äh... nein.
Aber entweder übergibt er seinen Vektor als Referenz an die Methoden oder er hat Referenzen/Pointer in der Liste gespeichert. Was davon ist völlig unerheblich für die reine Funktionalität.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

GR-PA

Treue Seele

Beiträge: 326

Wohnort: Daheim

Beruf: Faulenzer

  • Private Nachricht senden

15

11.01.2011, 17:47

Zitat

nicht jedesmal end aufrufen

"Premature optimization is the root of all evil"
Diese "Verbesserung" führt (im Release Modus) bei vectors mit 10000, 512 Byte großen, Elementen im Durchschnitt zu einer Differenz von 0 Millisekunden... (manchmal ist sogar die "normale" Version schneller...)
Im Debug-Modus ist dein Vorschlag zwar deutlich schneller, aber man optimiert ja schließlich nicht für bessere Debug-Geschwindigkeit...

Falls du's selber austesten willst:

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 <Windows.h>
#include <vector>
#undef max
struct HugeTestStruct
{
    char test_array[512];
};

int main()
{
    std::vector<HugeTestStruct> test_vector(10000);

    __int64 total_diff = 0;
    const int count = 5000;
    for(unsigned int i = 0; i < count; ++i)
    {
        __int64 t_s = timeGetTime();
        for(std::vector<HugeTestStruct>::iterator it = test_vector.begin(); it != test_vector.end(); ++it)
            *it = HugeTestStruct();
        __int64 t_diff = timeGetTime() - t_s;

        t_s = timeGetTime();
        for(std::vector<HugeTestStruct>::iterator it = test_vector.begin(), end = test_vector.end(); it != end; ++it)
            *it = HugeTestStruct();
        __int64 t_diff_2 = timeGetTime() - t_s;

        std::cout << "nicht 'optimiert' : " << t_diff << std::endl;
        std::cout << "'optimiert' : " << t_diff_2 << std::endl;
        std::cout << "Differenz : " << t_diff - t_diff_2 << std::endl << std::endl;

        total_diff += t_diff - t_diff_2;
    }

    std::cout << "Durchschnittliche Differenz: " << total_diff / count;

    std::cin.get();
    return 0;
}
Signaturen werden überbewertet

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

16

11.01.2011, 17:57

Zeiger im Vektor? Doppelt gemoppelt hält besser oder wie?

Äh... nein.
Aber entweder übergibt er seinen Vektor als Referenz an die Methoden oder er hat Referenzen/Pointer in der Liste gespeichert. Was davon ist völlig unerheblich für die reine Funktionalität.

Kommt drauf an. Im Allgemeinen ja. Oftmals packen die Leute aber Objekte als Zeiger in Listen und verwalten die Objekte dann selbst mit new. Das ist dann Unsinn. Dann lieber den vector oder die Liste das verwalten lassen und den Container per Referenz übergeben, falls man etwas darin verändern will.

sowas ist unsinning:

C-/C++-Quelltext

1
2
3
4
5
6
7
std::vector<Object> objects;
objects.push_back(Object(/*...*/));
....

vector<Object*> pObjects;
pObjects.push_back(objects.begin());
foo(pObjects);

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

17

11.01.2011, 18:09

Wie ich sagte: "(...) unerheblich für die reine Funktionalität (...)"

Dein Beispiel ist auch nicht ganz das, was ich überhaupt meinte.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

18

11.01.2011, 18:27

Deviloper bezog das "doppelt gemoppelt" auf die Verwaltung.
Ansonsten hat es natürlich keine Redundanz. Aber im Kontext gesehen ist es unsinnig.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

19

11.01.2011, 18:47

Ja, ist trotzdem nicht das, worüber ich geredet hab. Is egal.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige