Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Frage zu Codestück

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ] [ 3 ]
000
22.08.2007, 12:09 Uhr
banshee




C++:
if(++pTotal[j] && ++pMap[j][ng] > pMax[j])
                    pMax[j] = pMap[j][ng];


pTotal, pMax sind jeweils Zeiger auf int, auf 0 vorinitialisiert.
pMap ist eine map<string, int>

Ich frage mich jetzt, tut das Codestück nicht das selbe wie:


C++:
if(!pMax[j])
pMap[j] = pMap[j][ng]


denn ++pTotal[j] && ++pMap[j][ng] wird ja maximal 1, ist also nur dann größer als pMap[j], wenn dieses 0 ist (da vorinitialisiert).
Auf der anderen Seite wird ++pTotal[j] && ++pMap[j][ng] mindestens 1, weil auch hier beides auf 0 vorinitialisiert ist und durch den ++-Operator beides auf 1 oder größer gesetzt wird.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
22.08.2007, 13:17 Uhr
Tommix



Hallo,
> hat Priorität vor &&, d.h. der Code wird

C++:
if(++pTotal[j] && (++pMap[j][ng] > pMax[j]))
                    pMax[j] = pMap[j][ng];


ausgewertet.

Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
22.08.2007, 13:19 Uhr
virtual
Sexiest Bit alive
(Operator)


Scheusslicher Code. Allein Deine Fragestellung beweist es: wer die erste Version geschrieben hat, gehört wirklich aus der Softwareentwicklung verbannt.

Und nein: Dein Gegenvoschlag kann schon allein deshalb nicht identisch sein, weil
1. pTotal[j] auf jeden Fall und pMap[j][ng] manchmal verändert werden, aber in Deinem Vorschlag eben nicht.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
22.08.2007, 14:42 Uhr
banshee



ja stimmt, das hätte ich dann noch erhöhen müssen. Aber dadurch, dass die Operatorpriorität sowieso anders ist, hat sich das jawohl erledigt :>

Der Code ist übrigens noch harmlos. Viel interessanter ist das Konstrukt:


C++:
for (int i = 0; i++ < size; pTotal[i] = pMax[i] = 0) {
         pMap[i].clear();
      }


 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
22.08.2007, 15:13 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Nee da ist das erste sehr viel hässlicher.

Hier wird ja werden ja nur 2 Variabvlen im Schleifenkopf auf 0 gesetzt, schöner wäre es natürlich das im Rumpf der Schleife zu machen...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
22.08.2007, 18:53 Uhr
banshee



Wenn wir gerade schon dabei sind. Wie kann man den Code eigentlich stilistisch schöner machen. Die Klammer wegen der Operatorpriorität ist ja klar.
Und dann hab ich mir überlegt, könnte ich ja pTotal auf 1 initialisieren und dann nach jedem durchlauf erhöhen.
Nur bei der map wirds schwierig, weil die ja nicht initialisiert ist, sondern 0 zurückgibt, weil sie keinen Eintrag mit dem gesuchten String hat. Also das müsste man dann direkt vor der Schleife noch erhöhen oder gehts noch schöner?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
23.08.2007, 01:14 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


my favourite für die Schleife ist ja


C++:
for (int i = size;--i; pTotal[i] = pMax[i] = 0, pMap[i].clear());



oder
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
23.08.2007, 10:15 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Was, inklusive der überflüssigen Leerzeichen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
23.08.2007, 14:12 Uhr
0xdeadbeef
Gott
(Operator)


Ich würd an der Stelle eher grundsätzlich denken.

C++:
for(int i = 0; i < size; ++i) {
  pTotal[i] = pMax[i] = 0;
  pMap[i].clear();
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
23.08.2007, 16:36 Uhr
banshee



Achso, ich meinte nicht die Schleife sondern das, was ich als erstes gepostet habe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ] [ 3 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: