operator[][]?



  • Konrad Rudolph schrieb:

    cout << a[i(3), i(4)] // oder auch das zweite 'i' weglassen:
         << a[i(3), 4];
    

    dann können wir auch endlich machen, daß die nubes nicht immer zeile und spalte vertauschen, indem zeilen- und spatenidizes nicht ohne weiteres subtrahiert und zugewiesen werden können. (auch hier sehe ich dauernd x,y statt des schonen y,x.

    for(custom::helpers::matrix::indexing::row y(0);y!=custom::helpers::matrix::indexing::row(10);++y){
     for(custom::helpers::matrix::indexing::column x(0);x!=custom::helpers::matrix::indexing::column(10);++x){
      cout<<a[x,y]<<'\n';//geht
      cout<<a[y,x]<<'\n';//geht auch und liefert das gleiche
      x=y;//geht nicht, denn das ist zu 99,9% ein programmierfehler
      x=custom::helpers::matrix::indexing::column(0)+(y-custom::helpers::matrix::indexing::row(0));//geht
    }
    }
    

    nachtrag: um nicht aus versehen mit einem index, der fürs eine array gedacht war, ein anderes array zu benutzen, sollte der index den genauen arraytyp mitführen.

    x=custom::helpers::matrix::indexing::column<custom::containers::matrix<std::string> >(0)+(y-custom::helpers::matrix::indexing::row<custom::containers::matrix<std::string> >(0))
    


  • Okay, Volkard, mag doof klingen aber in der eben von Dir vorgeschlagenen Form ergibt das für mich sogar Sinn. Natürlich nicht mit solch einem ellenlangen Namensbereich aber wenn man eh schon eine Matrixklasse baut, wäre es sinnvoll, z.B. Typen matrix<>::row und matrix<>::column einzuführen, die dann analog zu Iteratoren von row_begin() bis row_end() usw. durchlaufen.



  • Konrad Rudolph schrieb:

    Okay, Volkard, mag doof klingen aber in der eben von Dir vorgeschlagenen Form ergibt das für mich sogar Sinn.

    irgendwie sinn ist drin, jo. nur solche witze sind gut. schon 1995 hab ich für x- und y-koordinaten getrennte klassen gehabt und stellte fest, daß die verdammt viele fehler weggemacht haben.
    und das ist auch der kern von der ursprünglichen Ungarischen Notation. einfach als präfix dranscheiben, ob's ne zeile oder ne spalte bezeichnet und schon sieht der geübte programmierer auf den ersten blick, daß p=new(rowX1-columnX2) bestimmt ein programmierfehler ist.
    war aber auf dauer dann doch nicht gut. zu viel arbeit und zu wenige fehler weggemacht. evtl weil ich besser wurde und von allein nicht mehr gerne x und y vertausch hab.



  • Konrad Rudolph schrieb:

    wäre es sinnvoll, z.B. Typen matrix<>::row und matrix<>::column einzuführen, die dann analog zu Iteratoren von row_begin() bis row_end() usw. durchlaufen.

    nicht wirklich. kannst auch einen index festhalten und mit dem anderen duchlaufen. ok, einen adapter zum spaltenlaufen und zeilenlaufen dazuliefern, wäre sinnig, um das in anderen algos verwenden zu können. sowas wie std::slice


Anmelden zum Antworten