Bitte angucken und helfen
-
Dieser Thread wurde von Moderator/in estartu aus dem Forum MFC (Visual C++) in das Forum DOS und Win32-Konsole verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
hansi_hinterseer schrieb:
switch-case?
sorry.. das ist ein schlechtes beispiel... genau das will ich umgehen...
kein switch-case und kein if-else...ich hab insgesamt 9 Ringe denen jeweils 12 Farben zugeordnet werden können....
wenn ich das alles mit if-else mach, sitz ich da nächste woche noch dran xD.wäre praktisch wenn jemand wüsste wie man einfach das eingegebene wort dem integer wert zuweisen kann. und das ganze kurz bitte
Danke im Vorraus
-
std::map< std::string, int >
-
THX 1138 schrieb:
std::map< std::string, int >
ja, genau sowas habe ich gesucht.... nur jetzt gibt es ein weiteres problem....
ich bin noch anfänger im prrogrammieren und weiß jetzt nicht wie ich es anwenden soll..... kann mir das noch einer erklären?Nochmal Danke im V-o-r-r-a-u-s^^
-
Soulpincher schrieb:
Nochmal Danke im V-o-r-r-a-u-s^^
Erstaunlich, was sich die Leute alles einfallen lassen, um voraus nicht korrekt schreiben zu müssen
*scnr*
-
CStoll schrieb:
Soulpincher schrieb:
Nochmal Danke im V-o-r-r-a-u-s^^
Erstaunlich, was sich die Leute alles einfallen lassen, um voraus nicht korrekt schreiben zu müssen
*scnr*
Danke für die konstruktive Bemerkung
-
Da mir keiner erklären kann wie ich "std::map< std::string, int >" anwenden kann, habe ich es mal mit switch-case versucht.... darauf kam dieser fehler:
switch (Ring1)
{
case 'Braun': Ring1=Braun;break;case 'Rot': Ring1=Rot;break;
case 'Orange': Ring1=Orange;break;
case 'Gruen': Ring1=Gruen;break;
case 'Blau': Ring1=Blau;break;
case 'Violett': Ring1=Violett;break;
case 'Grau': Ring1=Grau;break;
case 'Weiss': Ring1=Weiss;break;
}[cpp]
C:\Dokumente und Einstellungen\gast\test.cpp(183) : error C2450: switch-Ausdruck des Typs 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' nicht erlaubt
Kein benutzerdefinierter Konvertierungsoperator verfuegbar, der diese Konvertierung durchfuehren kann, oder der Operator kann nicht aufgerufen werden
C:\Dokumente und Einstellungen\gast\test.cpp(184) : error C2015: Zu viele Zeichen in der Konstante
C:\Dokumente und Einstellungen\gast\test.cpp(188) : error C2015: Zu viele Zeichen in der Konstante
C:\Dokumente und Einstellungen\gast\test.cpp(188) : error C2196: Wert fuer case '0' wurde bereits verwendet
C:\Dokumente und Einstellungen\gast\test.cpp(190) : error C2015: Zu viele Zeichen in der Konstante
C:\Dokumente und Einstellungen\gast\test.cpp(190) : error C2196: Wert fuer case '0' wurde bereits verwendet
C:\Dokumente und Einstellungen\gast\test.cpp(194) : error C2015: Zu viele Zeichen in der Konstante
C:\Dokumente und Einstellungen\gast\test.cpp(194) : error C2196: Wert fuer case '0' wurde bereits verwendet
C:\Dokumente und Einstellungen\gast\test.cpp(198) : error C2015: Zu viele Zeichen in der Konstante
C:\Dokumente und Einstellungen\gast\test.cpp(198) : error C2196: Wert fuer case '0' wurde bereits verwendet
Fehler beim Ausführen von cl.exe.Daraus folgere ich mal das man switch case so nicht anwenden kann ;-)(oder doch?? wennn ja, wie?)
Kann man switch-case überhaupt mit ganzen Worten benutzen oder kann man nur einzelne Stellen abfragen?Danke im VORAUS
-
Na gut, dann etwas zum Thema (btw, meine obige Aussage war ernst gemeint):
switch-case funktioniert nur mit Ganzzahltypen als Auswahlkriterium (int in allen Variationen, char, enum's). Und Zeichen-Konstanten bestehen normalerweise nur aus einem Zeichen, deshalb sind die Ausdrücke 'Braun' etc. ungültig.
Für den Umgang mit map's empfehle ich mal einen Blick in meinen Magazin-Artikel "Aufbau der STL - Teil 1" (zu erreichen dort↓).
In Kurzfassung sieht das so aus:
map<string,int> Farbnummern; Farbnummern["Braun"]=Braun; Farbnummern["Rot"]=Rot; ... cout<<Farbnummern[Ring1]<<endl;
(die map<> kannst du einmal anlegen und dann beliebig oft nach Werten da drin suchen)
-
Ich poste am besten mal das ganze programm... dann könnt ihr mir genau sagen was ich einsetzen muss.... dann verstehe ich es vllt.
#include <iostream> #include <conio.h> #include <string> using namespace std; int main (void) { char Auswahl = 'X'; int Braun = 1; int Erg; int Ergebnis; cout<<"Moechten sie [W] die Widerstandszahl oder [F] die Farbcodierung eingeben?\n"<<endl; cin>>Auswahl; if (Auswahl == 'F') { cout<<"\nGeben sie die gewuenschte Anzahl der Ringe an (V = 4 oder R = 5)\n"<<endl; cin>>Auswahl; } string Ring1; string Ring2; string Ring3; string Ring4; string Ring5; switch (Auswahl) { case 'W': cout<<"Void";break; case 'V': cout<<"Geben sie bitte die Farbe des ersten Ringes an:\n\n"; cout<<"Braun"<<endl; cout<<"Rot"<<endl; cout<<"Orange"<<endl; cout<<"Gelb"<<endl; cout<<"Gruen"<<endl; cout<<"Blau"<<endl; cout<<"Violett"<<endl; cout<<"Grau"<<endl; cout<<"Weiss"<<endl; cin>>Ring1; cout<<"Geben sie bitte die Farbe des zweiten Ringes an:\n\n"; cout<<"Schwarz"<<endl; cout<<"Braun"<<endl; cout<<"Rot"<<endl; cout<<"Orange"<<endl; cout<<"Gelb"<<endl; cout<<"Gruen"<<endl; cout<<"Blau"<<endl; cout<<"Violett"<<endl; cout<<"Grau"<<endl; cout<<"Weiss"<<endl; cin>>Ring2; cout<<"Geben sie bitte die Farbe des dritten Ringes an:\n\n"; cout<<"Schwarz"<<endl; cout<<"Braun"<<endl; cout<<"Rot"<<endl; cout<<"Orange"<<endl; cout<<"Gelb"<<endl; cout<<"Gruen"<<endl; cout<<"Blau"<<endl; cout<<"Violett"<<endl; cout<<"Grau"<<endl; cout<<"Weiss"<<endl; cout<<"Gold"<<endl; cout<<"Silber"<<endl; cin>>Ring3; cout<<"Geben sie bitte die Farbe des vierten Ringes an:\n\n"; cout<<"Keine"<<endl; cout<<"Braun"<<endl; cout<<"Rot"<<endl; cout<<"Gruen"<<endl; cout<<"Blau"<<endl; cout<<"Violett"<<endl; cout<<"Gold"<<endl; cout<<"Silber"<<endl; cin>>Ring4;break; case 'R': cout<<"Geben sie bitte die Farbe des ersten Ringes an:\n\n"; cout<<"Braun"<<endl; cout<<"Rot"<<endl; cout<<"Orange "<<endl; cout<<"Gelbt "<<endl; cout<<"Gruen"<<endl; cout<<"Blau"<<endl; cout<<"Violett"<<endl; cout<<"Grau"<<endl; cout<<"Weiss\n\n"<<endl; cin>>Ring1; cout<<"\nGeben sie bitte die Farbe des zweiten Ringes an:\n\n"; cout<<"Schwarz"<<endl; cout<<"Braun"<<endl; cout<<"Rot"<<endl; cout<<"Orange"<<endl; cout<<"Gelb"<<endl; cout<<"Gruen"<<endl; cout<<"Blau"<<endl; cout<<"Violett"<<endl; cout<<"Grau"<<endl; cout<<"Weiss\n\n"<<endl; cin>>Ring2; cout<<"Geben sie bitte die Farbe des dritten Ringes an:\n\n"; cout<<"Schwarz"<<endl; cout<<"Braun"<<endl; cout<<"Rot"<<endl; cout<<"Orange"<<endl; cout<<"Gelb"<<endl; cout<<"Gruen"<<endl; cout<<"Blau"<<endl; cout<<"Violett"<<endl; cout<<"Grau"<<endl; cout<<"Weiss\n\n"<<endl; cin>>Ring3; cout<<"Geben sie bitte die Farbe des vierten Ringes an:\n\n"; cout<<"Schwarz"<<endl; cout<<"Braun"<<endl; cout<<"Rot"<<endl; cout<<"Orange"<<endl; cout<<"Gelb"<<endl; cout<<"Gruen"<<endl; cout<<"Blau"<<endl; cout<<"Gold"<<endl; cout<<"Silber\n\n"<<endl; cin>>Ring4; cout<<"Geben sie bitte die Farbe des fünften Ringes an:\n\n"; cout<<"Keine"<<endl; cout<<"Braun"<<endl; cout<<"Rot"<<endl; cout<<"Gruen"<<endl; cout<<"Blau"<<endl; cout<<"Violett"<<endl; cout<<"Grau "<<endl; cout<<"Gold"<<endl; cout<<"Silber\n\n"<<endl; cin>>Ring5;break; default :cout<<"Falsche eingabe";break; } /*Erg = Integer.parseInt(Ring1); Ergebnis = Integer.toString(Erg); */ return 0; }
also, die variablen sind noch nicht deklariert... aber es geht mir nur um die allgemeine funktion des programms und noch nicht um die genauen zahlen...
Ich muss den eingegebenen worten eine Zahl zuweisen und muss nachher damit rechnen.. if-else funktioniert nicht, switch-case auch nicht... und die vorschläge bis jetzt waren für mich noch unverständlich!
Nochmals danke und ich hoffe ihr könnt mir weiterhelfen!
-
Naja... bin sicher es funktioniert so... aber wie gesagt ich bin noch anfänger in der programmierung und das mit den maps verstehe ich nicht direkt
z.B:
map<string,int> Farbnummern;
Farbnummern["Braun"]=Braun;
Farbnummern["Rot"]=Rot;
...cout<<Farbnummern[Ring1]<<endl;
schreibt man da die Variablen in die Map rein oder ist das schon die Abfrage??
-
ups... hat gehangen jetzt ist es mehrmals drin^^
-
Mit den Anweisungen
Farbnummern["Braun"]=Braun;
etc. füllst du die map mit Wert(paar)en aus einem Schlüssel (in diesem Fall der String "Braun") und einem dazugehörigen Wert (hier die int-Konstante Braun=2). Die cout-Zeile sucht in der map nach dem Schlüssel Ring1 und gibt den zugehörigen Wert aus.(wie gesagt, lies mal im Magazin)
-
Also... ich verstehe nicht wie man die map anwendet, also wie man es schreiben muss damit auch alles funktioniert... Ich habe auch dein magazin gelesen,was bestimmmt auch hilfreich ist, aber wie gesagt, bin ich noch ein anfänger!
Kannst du mir vllt. genau sagen wie die map auszusehen hat wenn ich alle deklarationen angebe?
Schwarz = 0
Braun = 1
Rot = 2
Orange = 3
Gelb = 4
Gruen = 5
Blau = 6
Violett = 7
Grau = 8
Weiss = 9Ich weiß dass es ein bisschen unverschämt rüberkommt wenn ich jetzt frage ob du meine arbeit machen kannst, aber ich komme so absolut nicht weiter....
danke für deine hilfe
Greets Soulpincher
-
Im einfachsten Fall kannst du für jede Farbe eine Zuweisung ala
Farbnummern["Farbe"]=Farbe;
untereinander schreiben. Eleganter geht es, wenn du Hilfsarrays und STL-Algorithmen benutzt:void init_map(map<string,int>& data) { //in das Array schreibst du alle Kombinationen aus Farbname und Kennnummer pair<string,int> values[]= { make_pair("Schwarz",0), make_pair("Braun",1), ... }; int vsize=sizeof(values)/sizeof(values[0]); copy(values,values+vsize,inserter(data,data.begin()); } //im Hauptprogramm: map<string,int> Farbnummern; init_map(Farbnummern);
-
welche bibliothek muss man verwenden?
-
#include <iostream> #include <conio.h> #include <string> using namespace std; int main (void) { char Auswahl = 'X'; int Braun = 1; int Erg; int Ergebnis; int Rot = 1; void init_map(map<string,int>& data) { //in das Array schreibst du alle Kombinationen aus Farbname und Kennnummer pair<string,int> values[]= { make_pair("Schwarz",0), make_pair("Braun",1), make_pair("Rot",2), make_pair("Orange",3), make_pair("Gelb",4), make_pair("Grün",5), make_pair("Blau",6), make_pair("Violett",7), make_pair("Grau",8), make_pair("Weiss",9), }; int vsize=sizeof(values)/sizeof(values[0]); copy(values,values+vsize,inserter(data,data.begin()); } cout<<"Moechten sie [W] die Widerstandszahl oder [F] die Farbcodierung eingeben?\n"<<endl; cin>>Auswahl; if (Auswahl == 'F') { cout<<"\nGeben sie die gewuenschte Anzahl der Ringe an (V = 4 oder R = 5)\n"<<endl; cin>>Auswahl; } string Ring1; string Ring2; string Ring3; string Ring4; string Ring5; switch (Auswahl) { case 'W': cout<<"Void";break; case 'V': cout<<"Geben sie bitte die Farbe des ersten Ringes an:\n\n"; cout<<"Braun"<<endl; cout<<"Rot"<<endl; cout<<"Orange"<<endl; cout<<"Gelb"<<endl; cout<<"Gruen"<<endl; cout<<"Blau"<<endl; cout<<"Violett"<<endl; cout<<"Grau"<<endl; cout<<"Weiss"<<endl; cin>>Ring1; cout<<"Geben sie bitte die Farbe des zweiten Ringes an:\n\n"; cout<<"Schwarz"<<endl; cout<<"Braun"<<endl; cout<<"Rot"<<endl; cout<<"Orange"<<endl; cout<<"Gelb"<<endl; cout<<"Gruen"<<endl; cout<<"Blau"<<endl; cout<<"Violett"<<endl; cout<<"Grau"<<endl; cout<<"Weiss"<<endl; cin>>Ring2; cout<<"Geben sie bitte die Farbe des dritten Ringes an:\n\n"; cout<<"Schwarz"<<endl; cout<<"Braun"<<endl; cout<<"Rot"<<endl; cout<<"Orange"<<endl; cout<<"Gelb"<<endl; cout<<"Gruen"<<endl; cout<<"Blau"<<endl; cout<<"Violett"<<endl; cout<<"Grau"<<endl; cout<<"Weiss"<<endl; cout<<"Gold"<<endl; cout<<"Silber"<<endl; cin>>Ring3; cout<<"Geben sie bitte die Farbe des vierten Ringes an:\n\n"; cout<<"Keine"<<endl; cout<<"Braun"<<endl; cout<<"Rot"<<endl; cout<<"Gruen"<<endl; cout<<"Blau"<<endl; cout<<"Violett"<<endl; cout<<"Gold"<<endl; cout<<"Silber"<<endl; cin>>Ring4;break; case 'R': cout<<"Geben sie bitte die Farbe des ersten Ringes an:\n\n"; cout<<"Braun"<<endl; cout<<"Rot"<<endl; cout<<"Orange "<<endl; cout<<"Gelbt "<<endl; cout<<"Gruen"<<endl; cout<<"Blau"<<endl; cout<<"Violett"<<endl; cout<<"Grau"<<endl; cout<<"Weiss\n\n"<<endl; cin>>Ring1; cout<<"\nGeben sie bitte die Farbe des zweiten Ringes an:\n\n"; cout<<"Schwarz"<<endl; cout<<"Braun"<<endl; cout<<"Rot"<<endl; cout<<"Orange"<<endl; cout<<"Gelb"<<endl; cout<<"Gruen"<<endl; cout<<"Blau"<<endl; cout<<"Violett"<<endl; cout<<"Grau"<<endl; cout<<"Weiss\n\n"<<endl; cin>>Ring2; cout<<"Geben sie bitte die Farbe des dritten Ringes an:\n\n"; cout<<"Schwarz"<<endl; cout<<"Braun"<<endl; cout<<"Rot"<<endl; cout<<"Orange"<<endl; cout<<"Gelb"<<endl; cout<<"Gruen"<<endl; cout<<"Blau"<<endl; cout<<"Violett"<<endl; cout<<"Grau"<<endl; cout<<"Weiss\n\n"<<endl; cin>>Ring3; cout<<"Geben sie bitte die Farbe des vierten Ringes an:\n\n"; cout<<"Schwarz"<<endl; cout<<"Braun"<<endl; cout<<"Rot"<<endl; cout<<"Orange"<<endl; cout<<"Gelb"<<endl; cout<<"Gruen"<<endl; cout<<"Blau"<<endl; cout<<"Gold"<<endl; cout<<"Silber\n\n"<<endl; cin>>Ring4; cout<<"Geben sie bitte die Farbe des fünften Ringes an:\n\n"; cout<<"Keine"<<endl; cout<<"Braun"<<endl; cout<<"Rot"<<endl; cout<<"Gruen"<<endl; cout<<"Blau"<<endl; cout<<"Violett"<<endl; cout<<"Grau "<<endl; cout<<"Gold"<<endl; cout<<"Silber\n\n"<<endl; cin>>Ring5;break; default :cout<<"Falsche eingabe";break; } /*Erg = Integer.parseInt(Ring1); Ergebnis = Integer.toString(Erg); */ return 0; }
ich habs mal da hingezogen und gehofft das es stimmt...
jetzt kamen folgende fehler!Widerstandsfarbcodierung.cpp
F:\Schulprojekt\Widerstandsfarbcodierung.cpp(28) : error C2065: 'map' : nichtdeklarierter Bezeichner
F:\Schulprojekt\Widerstandsfarbcodierung.cpp(28) : error C2275: "string" : Ungültige Verwendung dieses Typs als Ausdruck
c:\programme\microsoft visual studio\vc98\include\xstring(612) : Siehe Deklaration von 'string'
F:\Schulprojekt\Widerstandsfarbcodierung.cpp(28) : error C2062: 'int'-Typ unerwartet
F:\Schulprojekt\Widerstandsfarbcodierung.cpp(29) : error C2143: Syntaxfehler : Fehlendes ';' vor '{'
F:\Schulprojekt\Widerstandsfarbcodierung.cpp(45) : error C2065: 'inserter' : nichtdeklarierter Bezeichner
F:\Schulprojekt\Widerstandsfarbcodierung.cpp(45) : error C2065: 'data' : nichtdeklarierter Bezeichner
F:\Schulprojekt\Widerstandsfarbcodierung.cpp(45) : error C2228: Der linke Teil von '.begin' muss eine Klasse/Struktur/Union sein
F:\Schulprojekt\Widerstandsfarbcodierung.cpp(45) : error C2143: Syntaxfehler : Fehlendes ')' vor ';'
Fehler beim Ausführen von cl.exe.
-
Erstens: Du kannst keine Funktionen (init_map()) in der main() definieren. Die Funktion muß schon eigenständig stehen.
Zweitens: Du benötigst natürlich noch den Header <map>, um eine map<> anlegen und verwenden zu können - und <iterator> für den Insert-Iterator, den die init-Funktion verwendet.
-
CStoll schrieb:
Erstens: Du kannst keine Funktionen (init_map()) in der main() definieren. Die Funktion muß schon eigenständig stehen.
Zweitens: Du benötigst natürlich noch den Header <map>, um eine map<> anlegen und verwenden zu können - und <iterator> für den Insert-Iterator, den die init-Funktion verwendet.
Naja... danke für deine hilfe, aber ich denke ich komme so nicht weiter...
Hat mich gefreut dich kennen zu lernen, aber ich denke jetzt reicht es....
mir fehlen zu viele kenntnisse um überhaupt ansatzweise mit dir reden zu können!Ich fang jetzt neu an ohne string
MfG
-
Also ich habs jetzt teilweise hinbekommen aber.....
es wurde irgendwie ne neue Datei geladen T.T
// utility standard header #if _MSC_VER > 1000 #pragma once #endif #ifndef _UTILITY_ #define _UTILITY_ #include <iosfwd> #ifdef _MSC_VER #pragma pack(push,8) #endif /* _MSC_VER */ _STD_BEGIN // TEMPLATE STRUCT pair template<class _T1, class _T2> struct pair { typedef _T1 first_type; typedef _T2 second_type; pair() : first(_T1()), second(_T2()) {} pair(const _T1& _V1, const _T2& _V2) : first(_V1), second(_V2) {} template<class U, class V> pair(const pair<U, V> &p) : first(p.first), second(p.second) {} _T1 first; _T2 second; }; template<class _T1, class _T2> inline bool __cdecl operator==(const pair<_T1, _T2>& _X, const pair<_T1, _T2>& _Y) {return (_X.first == _Y.first && _X.second == _Y.second); } template<class _T1, class _T2> inline bool __cdecl operator!=(const pair<_T1, _T2>& _X, const pair<_T1, _T2>& _Y) {return (!(_X == _Y)); } template<class _T1, class _T2> inline bool __cdecl operator<(const pair<_T1, _T2>& _X, const pair<_T1, _T2>& _Y) {return (_X.first < _Y.first || !(_Y.first < _X.first) && _X.second < _Y.second); } template<class _T1, class _T2> inline bool __cdecl operator>(const pair<_T1, _T2>& _X, const pair<_T1, _T2>& _Y) {return (_Y < _X); } template<class _T1, class _T2> inline bool __cdecl operator<=(const pair<_T1, _T2>& _X, const pair<_T1, _T2>& _Y) {return (!(_Y < _X)); } template<class _T1, class _T2> inline bool __cdecl operator>=(const pair<_T1, _T2>& _X, const pair<_T1, _T2>& _Y) {return (!(_X < _Y)); } template<class _T1, class _T2> inline pair<_T1, _T2> __cdecl make_pair(const _T1& _X, const _T2& _Y) {return (pair<_T1, _T2>(_X, _Y)); } // ITERATOR TAGS (from <iterator>) struct input_iterator_tag {}; struct output_iterator_tag {}; struct forward_iterator_tag : public input_iterator_tag {}; struct bidirectional_iterator_tag : public forward_iterator_tag {}; struct random_access_iterator_tag : public bidirectional_iterator_tag {}; // TEMPLATE CLASS iterator (from <iterator>) template<class _C, class _Ty, class _D = ptrdiff_t> struct iterator { typedef _C iterator_category; typedef _Ty value_type; typedef _D distance_type; }; template<class _Ty, class _D> struct _Bidit : public iterator<bidirectional_iterator_tag, _Ty, _D> {}; template<class _Ty, class _D> struct _Ranit : public iterator<random_access_iterator_tag, _Ty, _D> {}; // TEMPLATE CLASS iterator_traits (from <iterator>) template<class _It> struct iterator_traits { typedef _It::iterator_category iterator_category; typedef _It::value_type value_type; typedef _It::distance_type distance_type; }; // TEMPLATE FUNCTION _Iter_cat (from <iterator>) template<class _C, class _Ty, class _D> inline _C __cdecl _Iter_cat(const iterator<_C, _Ty, _D>&) {_C _IterCatTag; _C* _pIterCatTag; _pIterCatTag = &_IterCatTag; // Workaround for C4700 warning return (_IterCatTag); } template<class _Ty> inline random_access_iterator_tag __cdecl _Iter_cat(const _Ty *) {random_access_iterator_tag _RandIterTag; random_access_iterator_tag* _pRandIterTag; _pRandIterTag = &_RandIterTag; // Workaround for C4700 warning return (_RandIterTag); } // TEMPLATE FUNCTION _Distance template<class _II> inline _CNTSIZ(_II) __cdecl distance(_II _F, _II _L) {_CNTSIZ(_II) _N = 0; _Distance(_F, _L, _N, _Iter_cat(_F)); return (_N); } template<class _II, class _D> inline void __cdecl _Distance(_II _F, _II _L, _D& _N) {_Distance(_F, _L, _N, _Iter_cat(_F)); } template<class _II, class _D> inline void __cdecl _Distance(_II _F, _II _L, _D& _N, input_iterator_tag) {for (; _F != _L; ++_F) ++_N; } template<class _II, class _D> inline void __cdecl _Distance(_II _F, _II _L, _D& _N, forward_iterator_tag) {for (; _F != _L; ++_F) ++_N; } template<class _II, class _D> inline void __cdecl _Distance(_II _F, _II _L, _D& _N, bidirectional_iterator_tag) {for (; _F != _L; ++_F) ++_N; } template<class _RI, class _D> inline void __cdecl _Distance(_RI _F, _RI _L, _D& _N, random_access_iterator_tag) {_N += _L - _F; } // TEMPLATE CLASS reverse_iterator (from <iterator>) template<class _RI, class _Ty, class _Rt = _Ty&, class _Pt = _Ty *, class _D = ptrdiff_t> class reverse_iterator : public _Ranit<_Ty, _D> { public: typedef reverse_iterator<_RI, _Ty, _Rt, _Pt, _D> _Myt; typedef _RI iter_type; typedef _Rt reference_type; typedef _Pt pointer_type; reverse_iterator() {} explicit reverse_iterator(_RI _X) : current(_X) {} _RI base() const {return (current); } _Rt operator*() const {return (*(current - 1)); } _Pt operator->() const {return (&**this); } _Myt& operator++() {--current; return (*this); } _Myt operator++(int) {_Myt _Tmp = *this; --current; return (_Tmp); } _Myt& operator--() {++current; return (*this); } _Myt operator--(int) {_Myt _Tmp = *this; ++current; return (_Tmp); } _Myt& operator+=(_D _N) {current -= _N; return (*this); } _Myt operator+(_D _N) const {return (_Myt(current - _N)); } _Myt& operator-=(_D _N) {current += _N; return (*this); } _Myt operator-(_D _N) const {return (_Myt(current + _N)); } _Rt operator[](_D _N) const {return (*(*this + _N)); } protected: _RI current; }; template<class _RI, class _Ty, class _Rt, class _Pt, class _D> inline bool __cdecl operator==( const reverse_iterator<_RI, _Ty, _Rt, _Pt, _D>& _X, const reverse_iterator<_RI, _Ty, _Rt, _Pt, _D>& _Y) {return (_X.base() == _Y.base()); } template<class _RI, class _Ty, class _Rt, class _Pt, class _D> inline bool __cdecl operator!=( const reverse_iterator<_RI, _Ty, _Rt, _Pt, _D>& _X, const reverse_iterator<_RI, _Ty, _Rt, _Pt, _D>& _Y) {return (!(_X == _Y)); } template<class _RI, class _Ty, class _Rt, class _Pt, class _D> inline bool __cdecl operator<( const reverse_iterator<_RI, _Ty, _Rt, _Pt, _D>& _X, const reverse_iterator<_RI, _Ty, _Rt, _Pt, _D>& _Y) {return (_Y.base() < _X.base()); } template<class _RI, class _Ty, class _Rt, class _Pt, class _D> inline bool __cdecl operator>( const reverse_iterator<_RI, _Ty, _Rt, _Pt, _D>& _X, const reverse_iterator<_RI, _Ty, _Rt, _Pt, _D>& _Y) {return (_Y < _X); } template<class _RI, class _Ty, class _Rt, class _Pt, class _D> inline bool __cdecl operator<=( const reverse_iterator<_RI, _Ty, _Rt, _Pt, _D>& _X, const reverse_iterator<_RI, _Ty, _Rt, _Pt, _D>& _Y) {return (!(_Y < _X)); } template<class _RI, class _Ty, class _Rt, class _Pt, class _D> inline bool __cdecl operator>=( const reverse_iterator<_RI, _Ty, _Rt, _Pt, _D>& _X, const reverse_iterator<_RI, _Ty, _Rt, _Pt, _D>& _Y) {return (!(_X < _Y)); } template<class _RI, class _Ty, class _Rt, class _Pt, class _D> inline _D __cdecl operator-( const reverse_iterator<_RI, _Ty, _Rt, _Pt, _D>& _X, const reverse_iterator<_RI, _Ty, _Rt, _Pt, _D>& _Y) {return (_Y.base() - _X.base()); } template<class _RI, class _Ty, class _Rt, class _Pt, class _D> inline reverse_iterator<_RI, _Ty, _Rt, _Pt, _D> __cdecl operator+(_D _N, const reverse_iterator<_RI, _Ty, _Rt, _Pt, _D>& _Y) {return (reverse_iterator<_RI, _Ty, _Rt, _Pt, _D>( _Y.base() - _N)); } // TEMPLATE CLASS istreambuf_iterator (from <iterator>) template<class _E, class _Tr = char_traits<_E> > class istreambuf_iterator : public iterator<input_iterator_tag, _E, _Tr::off_type> { public: typedef istreambuf_iterator<_E, _Tr> _Myt; typedef _E char_type; typedef _Tr traits_type; typedef _Tr::int_type int_type; typedef basic_streambuf<_E, _Tr> streambuf_type; typedef basic_istream<_E, _Tr> istream_type; istreambuf_iterator(streambuf_type *_Sb = 0) _THROW0() : _Sbuf(_Sb), _Got(_Sb == 0) {} istreambuf_iterator(istream_type& _I) _THROW0() : _Sbuf(_I.rdbuf()), _Got(_I.rdbuf() == 0) {} const _E& operator*() const {if (!_Got) ((_Myt *)this)->_Peek(); return (_Val); } const _E *operator->() const {return (&**this); } _Myt& operator++() {_Inc(); return (*this); } _Myt operator++(int) {if (!_Got) _Peek(); _Myt _Tmp = *this; _Inc(); return (_Tmp); } bool equal(const _Myt& _X) const {if (!_Got) ((_Myt *)this)->_Peek(); if (!_X._Got) ((_Myt *)&_X)->_Peek(); return (_Sbuf == 0 && _X._Sbuf == 0 || _Sbuf != 0 && _X._Sbuf != 0); } private: void _Inc() {if (_Sbuf == 0 || _Tr::eq_int_type(_Tr::eof(), _Sbuf->sbumpc())) _Sbuf = 0, _Got = true; else _Got = false; } _E _Peek() {int_type _C; if (_Sbuf == 0 || _Tr::eq_int_type(_Tr::eof(), _C = _Sbuf->sgetc())) _Sbuf = 0; else _Val = _Tr::to_char_type(_C); _Got = true; return (_Val); } streambuf_type *_Sbuf; bool _Got; _E _Val; }; template<class _E, class _Tr> inline bool __cdecl operator==(const istreambuf_iterator<_E, _Tr>& _X, const istreambuf_iterator<_E, _Tr>& _Y) {return (_X.equal(_Y)); } template<class _E, class _Tr> inline bool __cdecl operator!=(const istreambuf_iterator<_E, _Tr>& _X, const istreambuf_iterator<_E, _Tr>& _Y) {return (!(_X == _Y)); } // TEMPLATE CLASS ostreambuf_iterator (from <iterator>) template<class _E, class _Tr = char_traits<_E> > class ostreambuf_iterator : public iterator<output_iterator_tag, void, void> { typedef ostreambuf_iterator<_E, _Tr> _Myt; public: typedef _E char_type; typedef _Tr traits_type; typedef basic_streambuf<_E, _Tr> streambuf_type; typedef basic_ostream<_E, _Tr> ostream_type; ostreambuf_iterator(streambuf_type *_Sb) _THROW0() : _Failed(false), _Sbuf(_Sb) {} ostreambuf_iterator(ostream_type& _O) _THROW0() : _Failed(false), _Sbuf(_O.rdbuf()) {} _Myt& operator=(_E _X) {if (_Sbuf == 0 || _Tr::eq_int_type(_Tr::eof(), _Sbuf->sputc(_X))) _Failed = true; return (*this); } _Myt& operator*() {return (*this); } _Myt& operator++() {return (*this); } _Myt& operator++(int) {return (*this); } bool failed() const _THROW0() {return (_Failed); } private: bool _Failed; streambuf_type *_Sbuf; }; // TEMPLATE OPERATORS namespace rel_ops { template<class _Ty> inline bool __cdecl operator!=(const _Ty& _X, const _Ty& _Y) {return (!(_X == _Y)); } template<class _Ty> inline bool __cdecl operator>(const _Ty& _X, const _Ty& _Y) {return (_Y < _X); } template<class _Ty> inline bool __cdecl operator<=(const _Ty& _X, const _Ty& _Y) {return (!(_Y < _X)); } template<class _Ty> inline bool __cdecl operator>=(const _Ty& _X, const _Ty& _Y) {return (!(_X < _Y)); } _STD_END _STD_END #ifdef _MSC_VER #pragma pack(pop) #endif /* _MSC_VER */ #endif /* _UTILITY_ */ /* * Copyright (c) 1995 by P.J. Plauger. ALL RIGHTS RESERVED. * Consult your license regarding permissions and restrictions. */ /* * This file is derived from software bearing the following * restrictions: * * Copyright (c) 1994 * Hewlett-Packard Company * * Permission to use, copy, modify, distribute and sell this * software and its documentation for any purpose is hereby * granted without fee, provided that the above copyright notice * appear in all copies and that both that copyright notice and * this permission notice appear in supporting documentation. * Hewlett-Packard Company makes no representations about the * suitability of this software for any purpose. It is provided * "as is" without express or implied warranty. */
O.o
jetzt versteh ich garnix mehr
-
Was soll denn mit dieser Datei jetzt sein? Das ist (offenbar) der Standard-Header <utility> (der wird von <map> eingebunden, das die Schlüssel/Wert-Paare als std::pair anlegt).
PS: Was spricht denn für dich gegen die Verwendung von Strings? Die Alternative dazu wäre höchstens char* - und das ist wesentlich unangenehmer in der Handhabung.