Kezdőlap › Fórumok › Programozás › matrix osztaly osszeadasra
- This topic has 178 hozzászólás, 8 résztvevő, and was last updated 17 years, 4 months telt el by
uzsolt.
-
SzerzőBejegyzés
-
2008-02-21-14:25 #2154629zoltan22 wrote:jules wrote:valahogy ezeket a C matrixokat minden generalas utan el kellene tarolni…
Ha mar C++, hasznalhatnad a vektor osztalyt: http://cppreference.com/cppvector/index.html
./off
vizsla wrote:Valami hasonló(k) van(nak) az std libben is.Ott meg van egy nagy rakas preporecesszor dirketiva is kozte, hogy teljesen olvashatatlan legyen 🙂
Meg viszonylag keveset tud (pl. műveletek), viszonylag rugalmatlan (pl. a több típusú argumentumok) és viszonylag (ill. nagyon) lassú (mivel speciális funkciókat tartalmaz és egyébként is „sebességoptimalizáltan” van megírva), de legalább szabványos. :))) (És jó példa, hogy hogy lehet valamit profi, jól átgondolt módon megcsinálni.)
Ez az std::vector is pl. egy rand. iterátorral felszerelt tároló, inkább, mint műveletvégző. Ilyen 10-es, esetleg 100-as nagyságrendű elemszámnál, még elmegy, de afölött már kínlódás használni. Ráadásul nem több dimenziós műveletekhez készült, így eleve „át” kell írni.
Szóval egyszerűbb írni egyet, ami lineárisan (egy mutatóval – nem iterátorral – elérhetően) tárolja (mint, ahogy vázoltam). Annál is inkább, mert elemek közbeszúrására itt nem igazán van szükség.Az elemeket mutató mutatójával is lehet tárolni, de a sorok/elemek így is kényelmesen elérhetőek egy maradékos osztással. És ezzel egy jelentős inicializálási időt és memóriát meg lehet takarítani a sorok számától függően.
Persze a „mindenttudó” (több féle argumentum, mindenféle math.h és statisztikai műveletekkel megtűzdelt) mátrix/vektor osztály forrása, úgy egy 1,44-es floppy-nyi tárhelyen terül el. Nyílván neki ez is fölösleges, de az alapelv megfelelő.
2008-02-21-14:25 #2154630zoltan22 wrote:jules wrote:valahogy ezeket a C matrixokat minden generalas utan el kellene tarolni…Ha mar C++, hasznalhatnad a vektor osztalyt: http://cppreference.com/cppvector/index.html
./off
vizsla wrote:Valami hasonló(k) van(nak) az std libben is.Ott meg van egy nagy rakas preporecesszor dirketiva is kozte, hogy teljesen olvashatatlan legyen 🙂
Meg viszonylag keveset tud (pl. műveletek), viszonylag rugalmatlan (pl. a több típusú argumentumok) és viszonylag (ill. nagyon) lassú (mivel speciális funkciókat tartalmaz és egyébként is „sebességoptimalizáltan” van megírva), de legalább szabványos. :))) (És jó példa, hogy hogy lehet valamit profi, jól átgondolt módon megcsinálni.)
Ez az std::vector is pl. egy rand. iterátorral felszerelt tároló, inkább, mint műveletvégző. Ilyen 10-es, esetleg 100-as nagyságrendű elemszámnál, még elmegy, de afölött már kínlódás használni. Ráadásul nem több dimenziós műveletekhez készült, így eleve „át” kell írni.
Szóval egyszerűbb írni egyet, ami lineárisan (egy mutatóval – nem iterátorral – elérhetően) tárolja (mint, ahogy vázoltam). Annál is inkább, mert elemek közbeszúrására itt nem igazán van szükség.Az elemeket mutató mutatójával is lehet tárolni, de a sorok/elemek így is kényelmesen elérhetőek egy maradékos osztással. És ezzel egy jelentős inicializálási időt és memóriát meg lehet takarítani a sorok számától függően.
Persze a „mindenttudó” (több féle argumentum, mindenféle math.h és statisztikai műveletekkel megtűzdelt) mátrix/vektor osztály forrása, úgy egy 1,44-es floppy-nyi tárhelyen terül el. Nyílván neki ez is fölösleges, de az alapelv megfelelő.
2008-02-21-14:41 #2154631Amit viszont imádok ebben a rendszerben, hogy még egy ilyen dolog is gond és megeröltetés nélkül működik:
Code:// 1. mátrix
Matrix strm_a ( 1, n );
strm_a [ 0 ] = „strm_a 0”;
…
strm_a [ n ] = „strm_a n”;// Összefűzés kötőjellel
strm_a += ” – „;// 2. mátrix
Matrix strm_b ( 1, n );
strm_b [ 0 ] = „strm_b 0”;
…
strm_b [ n ] = „strm_b n”;// Összefűzés, de most még teszünk egy új sor jelzőt is a végére
strm_a = strm_b + „n”;// Kiíratás
std::cout << strm_a << std::endl;
[/CODE][code]
strm_a 0 – strm_b 0
…
strm_a n – strm_b nA magyarázat pedig egyszerű: a sztringeknél széntén van értelme a +operátornak és az az összefűzés. 🙂
Így, ha template argumentum helyére nem számot, hanem sztring típust írunk, akkor a mátrixunk egyenként összefűzi a sztringeket, anélkül, hogy bármit is módosítottunk volna a kódon. 🙂2008-02-21-14:41 #2154632Amit viszont imádok ebben a rendszerben, hogy még egy ilyen dolog is gond és megeröltetés nélkül működik:
Code:// 1. mátrix
Matrix strm_a ( 1, n );
strm_a [ 0 ] = „strm_a 0”;
…
strm_a [ n ] = „strm_a n”;// Összefűzés kötőjellel
strm_a += ” – „;// 2. mátrix
Matrix strm_b ( 1, n );
strm_b [ 0 ] = „strm_b 0”;
…
strm_b [ n ] = „strm_b n”;// Összefűzés, de most még teszünk egy új sor jelzőt is a végére
strm_a = strm_b + „n”;// Kiíratás
std::cout << strm_a << std::endl;
[/CODE][code]
strm_a 0 – strm_b 0
…
strm_a n – strm_b nA magyarázat pedig egyszerű: a sztringeknél széntén van értelme a +operátornak és az az összefűzés. 🙂
Így, ha template argumentum helyére nem számot, hanem sztring típust írunk, akkor a mátrixunk egyenként összefűzi a sztringeket, anélkül, hogy bármit is módosítottunk volna a kódon. 🙂2008-02-21-14:48 #2154633vizsla wrote:Ez az std::vector is pl. egy rand. iterátorral felszerelt tároló, inkább, mint műveletvégző. Ilyen 10-es, esetleg 100-as nagyságrendű elemszámnál, még elmegy, de afölött már kínlódás használni. Ráadásul nem több dimenziós műveletekhez készült, így eleve „át” kell írni.
Szóval egyszerűbb írni egyet, ami lineárisan (egy mutatóval – nem iterátorral – elérhetően) tárolja (mint, ahogy vázoltam). Annál is inkább, mert elemek közbeszúrására itt nem igazán van szükség.Nem a matrix implementalasara gondoltam, hanem tobb matrix tarolasara. 🙂
Code:#includetemplate
class Matrix {
// …..
};int main(void){
std::vector < Matrix > c; // c-ben tarthatunk tobb matrixot
}
2008-02-21-14:48 #2154634vizsla wrote:Ez az std::vector is pl. egy rand. iterátorral felszerelt tároló, inkább, mint műveletvégző. Ilyen 10-es, esetleg 100-as nagyságrendű elemszámnál, még elmegy, de afölött már kínlódás használni. Ráadásul nem több dimenziós műveletekhez készült, így eleve „át” kell írni.
Szóval egyszerűbb írni egyet, ami lineárisan (egy mutatóval – nem iterátorral – elérhetően) tárolja (mint, ahogy vázoltam). Annál is inkább, mert elemek közbeszúrására itt nem igazán van szükség.Nem a matrix implementalasara gondoltam, hanem tobb matrix tarolasara. 🙂
Code:#includetemplate
class Matrix {
// …..
};int main(void){
std::vector < Matrix > c; // c-ben tarthatunk tobb matrixot
}
2008-02-21-15:01 #2154635Ja! 🙂
Ha listában akarja tárolna, akkor megfelelő.
Ha nem akarja random elérni, akkor egy list is, ha közé sem akar szúrni, meg egy adott/dinamikus (viszonylag kis) számú mátrixot kell eltárolni, akkor a legegyszerűbb módszer new-val, malloc-cal, vagy (főként) statikusan tömbböt létrehozni. (Akkor nem kell a push_back… minden sz@r. :))2008-02-21-15:01 #2154636Ja! 🙂
Ha listában akarja tárolna, akkor megfelelő.
Ha nem akarja random elérni, akkor egy list is, ha közé sem akar szúrni, meg egy adott/dinamikus (viszonylag kis) számú mátrixot kell eltárolni, akkor a legegyszerűbb módszer new-val, malloc-cal, vagy (főként) statikusan tömbböt létrehozni. (Akkor nem kell a push_back… minden sz@r. :))2008-02-21-18:16 #2154637Ez tok jo, de a gyakorlatbol jobban tanulok a peldamon keresztul…:)
Azt nem tudnatok leirni, hogy konkretan hogy nezne ki? Ezzel szivok…
Tehat ugye az van, hogy generaltam veletlen vektorokat, x,y,z komponensel. Na most egy ilyen vektorbol csinalok egy 3×3-as matrixot. A masodik vektorbol egy masodik matrixot, …stb. Ezeket a matrixokat adnam ossze es osztanam el a generalt matrixok elemszamaval.
A forrast iderakom ha kell, de az elozoekben valahol mar leirtam, asszem:)
2008-02-21-18:16 #2154638Ez tok jo, de a gyakorlatbol jobban tanulok a peldamon keresztul…:)
Azt nem tudnatok leirni, hogy konkretan hogy nezne ki? Ezzel szivok…
Tehat ugye az van, hogy generaltam veletlen vektorokat, x,y,z komponensel. Na most egy ilyen vektorbol csinalok egy 3×3-as matrixot. A masodik vektorbol egy masodik matrixot, …stb. Ezeket a matrixokat adnam ossze es osztanam el a generalt matrixok elemszamaval.
A forrast iderakom ha kell, de az elozoekben valahol mar leirtam, asszem:)
-
SzerzőBejegyzés
- Be kell jelentkezni a hozzászóláshoz.
legutóbbi hsz