Indexmenge for Schleife



  • Hallo

    Eine for-Schleife läuft über einen definierten Indexbereich. Von einem Startwert bis einem Endwert...

    Angenommen man hat einen Vektor oder Array. Könnte man dessen Inhalt als Indexmenge für eine for-Schleife deklarieren?

    Grüße



  • Suchste range based for loop?

    std::vector<int> vec = {1, 3, 5, 2, 4};
    for (auto i : vec)
      std::cout << i << '\n';
    


  • Hi

    Ja das benötige ich. Bin eben auch darauf gestoßen. Allerdings bekomme ich das nicht compiliert.

    warning: range-based ‘for’ loops only available with -std=c++11 or -std=gnu++11
    

    Ich verwende g++ 5 und hoffte es würde C++ 11 unterstützen.

    Daher die nächste Frage. Wie kann man auf einem Linux Mint 17 in der Konsole mit g++ Code compilieren, der C++ 11 Standard ist?



  • cpp_Jungspund schrieb:

    warning: range-based ‘for’ loops only available with -std=c++11 or -std=gnu++11
    
    g++ -std=c++11 main.cpp
    


  • Perfekt

    Dieses Kürzel habe ich auch bis dato noch nicht in meiner Literatur gesehen. Super zu wissen. Danke 🙂



  • Allerdings geht eine range-based for Schleife ja über den Vektor den ich angebe. Okay.

    Gibt es auch einen Weg den Inhalt des Vektors in einer for Schleife zu nutzen als Laufvariable?

    Also wenn z.B. ein Vektor (2, 5, 9,...) gegeben ist, dass dann bei einer for schleife mit Laufindex i die Werte i=2, i=5, i=9 durchläuft?



  • Wo ist der Unterschied?



  • cpp_Jungspund schrieb:

    Also wenn z.B. ein Vektor (2, 5, 9,...) gegeben ist, dass dann bei einer for schleife mit Laufindex i die Werte i=2, i=5, i=9 durchläuft?

    Das ist eigentlich genau das, was die Range-based for Schleife macht. Meinst du sowas:

    std::vector<unsigned int> vec{2,5,9};
    
    for (unsigned int ui : vec)
    {
      // 1. Durchlauf: ui = 2
      // 2. Durchlauf: ui = 5
      // 3. Durchlauf: ui = 9
    }
    


  • Ich vermute, er meint eine indirekte Indexierung.

    void f(int i) { /*...*/ }
    
    void g(){
      int a[]={2,5,9};
      int b[10]= { /*...*/ };
      for(auto i:a)
        f(b[i]);
    }
    

    Wird aber wohl von selbst drauf gekommen sein, wenn er sich nochmal ein paar Gedanken gemacht hat. 🙂



  • Das hat mir sehr geholfen. Danke dafür


Log in to reply