Problem mit cin und std::map



  • Hallo zusammen,

    ich habe einen Vektor (dist) mit Strings als Inhalt. Diese Strings sollen die Elementnamen eines assoziativen Arrays std::map (distances) werden. Nun sollen die Werte des assoziativen Arrays mittels einer Schleife eingelesen werden.

    std::vector<string> dist;
    std::map<string, int> distances;
    //...
    for(unsigned int i = 0; i < distances.size(); i++) {
              cout << "\nStrecke " << dist[i] << " : ";
    	 cin >> distances[dist[i]]; //es wird auf keine Eingabe gewartet
    }
    

    Das Problem ist, dass irgendwie das cin übergangen wird. Es wird auf keine Eingabe gewartet, sondern die Schleife läuft einfach durch. Was mache ich denn da schon wieder falsch 🙄 ?

    Vielen Dank
    lg, freakC++



  • grr 😡 😡

    Ich habs vermasselt. Aus irgendeinem Grund ist size() 0 und die Schleife wird gar nicht durchlaufen. Warum fällt mir das erst immer ein, wenn ich den BEitrag schon geschrieben habe und ich davor lange gesucht habe.... *KOPF GEGEN DIE WAND HAU*

    lg, freakC++



  • Verwende doch den Debugger



  • mmh...ja! Hast ja recht. 😉

    Ich habe aber noch eine andere Frage. Ist die Länge eines std::vector nur durch meinen Speicher begrenzt oder noch durch etwas anderes?

    Vielen Dank
    lg, freakC++



  • Erst gucken dann posten!

    size_type vector::max_size () const:

    <a href= schrieb:

    C++ Reference">Returns the maximum number of elements that the vector container can hold.

    This is not the amount of storage space currently allocated to the vector (this can be obtained with member vector::capacity), but the maximum potential size the vector could reach due to system or library implementation limitations.



  • Bitte leg keine ganzen Sätze in Deinen Nick. Die kann man nicht ziteren und alles. Wenn Du was zu sagen hast, dann sage es normal.



  • Die Anzahl der Elemente wird im vector als size_type, was schlussendlich ein size_t ist, definiert. Ein size_t ist zumindest auf gängigen Betriebssystemen immer so groß wie ein Zeiger (32 Bit-> 4Byte, 64 Bit-> 8 Byte).
    Damit ist die Kapazität eines vectors wirklich nur auf den Speicher beschränkt.
    Es gibt jedoch trotzdem Einschränkungen:
    Unter 32-Bit Windows ist der maximale virtuelle Speicher pro Anwendung 2 GB, kann jedoch auf 3 GB erhöht werden (Flag im PE-Header).
    Unter 64 - Bit sind's momentan 8192 GB, was noch längst nicht dem Bereich von 264 Byte entspricht.


Anmelden zum Antworten