In Matrix iterieren



  • Wie kann ich ein einer per std::vector erstellten Matrix iterieren.
    also

    vector<vector<int> > v;
    

    Es gibt leider immer errors.
    Ich will die Matrix in zwei geschachtelten Schleifen durchlaufen.

    und noch eine kleine Sache... steh irgendwie grad aufm Schlauch

    #include <iostream>
    #include <vector>
    #include <ctime>
    
    typedef std::vector<int> INTVEC;
    int main()
    {
            INTVEC v;
            v.push_back(9);
            v.push_back(8);
            v.push_back(53);
            for(INTVEC::const_iterator it=v.begin();it<v.begin();++it)
                    std::cout << *it << std::endl;
            return 0;
    }
    

    Warum werden die Werte nicht ausgegeben?

    Danke



  • for(INTVEC::const_iterator it = v.begin(); it < v.begin(); ++it)
                    std::cout << *it << std::endl; 
    // dann wohl eher
    for(INTVEC::const_iterator it = v.begin(); it != v.end();++it)
                    std::cout << *it << std::endl;
    

    hilft das was?
    durchiterieren einfach mit 2 forschleifen:



  • vector<vector<int> > v;
    for(vector<vector<int> >::iterator i1=v.begin();i1<v.end();++i1){
        for(vector<int>::iterator i2=i1->begin();i2<i1->end();++i2){
            i2->push_back(5);    
        }
    }
    

    so in etwa halt^^

    v.begin();it<v.begin();

    btw,deshalb werden deine werte nich ausgegeben^^
    wenn 1<1 dann...



  • Genau.. das wars.. klar danke!

    hilft das was?

    Zitat:
    v.begin();it<v.begin();

    btw,deshalb werden deine werte nich ausgegeben^^
    wenn 1<1 dann...

    Ach, lasst mich doch beide in Ruhe!!! 😃



  • soll ich meinen post wegediten? 😃



  • Und wie kann ich jetzt auf den Index des aeusseren vectors
    in der aeusseren der beiden Schleifen zugreifen?

    Also, ohne std::vector waere das einfach bei

    for(int i=0;i<10;++i)
    meinVektor[i] // Index
    

    Aber wie ist es bei std::vector? Wie kriege ich den aktuellen Index mit dem Iterator?



  • kannste doch ganz einfach über den [] operator zugreifen:

    std::vector< std::vector<int> > matrixvec;
    for (unsigned i = 0; i < matrixvec.size(); ++i)
        for (unsigned j = 0; j < matrixvec[i].size(); ++j)
            cout << matrixvec[i][j] << endl;
    


  • Aber ich will ja nicht auf das Objekt zugreifen, sondern die Indexzahl haben und fuer spaetere Zwecke verwenden.



  • std::vector< std::vector<int> > matrixvec;
    int iX = -1, iY = -1;
    for (unsigned i = 0; i < matrixvec.size(); ++i)
        for (unsigned j = 0; j < matrixvec[i].size(); ++j)
            if (match(matrixvec[i][j])) { iX = i; iY = j; }
    


  • Ja, klar das geht, aber geht es auch mit Iteratoren?



  • iteratoren haben nur einen zeiger auf das naechste und den inhalt. keine angabe über "position" in der liste (please correct me...)



  • sicher,is sogar relativ einfach

    int index=distance(v.begin(),iterator_of_v);
    

Anmelden zum Antworten