View previous topic :: View next topic |
Author |
Message |
krisa
Joined: 17 Aug 2004 Posts: 15
|
Posted: Thu Mar 23, 2006 1:51 pm Post subject: masīva operatora pārslogošana C++ |
|
Labojums: Ja kādam nav skaidrs pārslogot=overload
Tātad problēma ir tāda - ja es uztaisu kautkādu mistisko datu struktūru un gribu pārslogot operatoru [], lai izpildot struktura[x]; kautkas tiktu atgriezts, viss ir vienkārši - ņemu klasē un rakstu
type operator[](kautkas){
}
Bet ko man darīt ja gribu pāslogot 2d masīva operatoru, tipa struktura[x][y]?
Uz sitiena neko jēdzīgu netā neatrad - moš kāds zin.
Doma, ka gribu uztaisīt 2d masīvu, kur katrs elements ir 2bitus liels. Un struktura[x][y] atgrieztu attiecīgo 2 bitu kas ir koordinātēs (x,y) vērtību pārvērstu par int. _________________ <..=*=.._..=[Krisa Tm]=.._..=*=..>
Last edited by krisa on Thu Mar 23, 2006 2:08 pm; edited 1 time in total |
|
Back to top |
|
|
Kamazs Guru
Joined: 17 Jan 2003 Posts: 829 Location: The glorious ancient city of Loja
|
Posted: Thu Mar 23, 2006 2:05 pm Post subject: |
|
Pārslogot... overload? _________________ ...un es uzskatu, ka Fallout ir etalons |
|
Back to top |
|
|
krisa
Joined: 17 Aug 2004 Posts: 15
|
Posted: Thu Mar 23, 2006 2:08 pm Post subject: |
|
jap...tā nu mums tajā augstskolā kautkad mācija, ka latviski esot pareizi - pašam jau ar īsti nepatīk ... _________________ <..=*=.._..=[Krisa Tm]=.._..=*=..> |
|
Back to top |
|
|
krisa
Joined: 17 Aug 2004 Posts: 15
|
Posted: Thu Mar 23, 2006 2:42 pm Post subject: |
|
Pēc paprātošanas nonācu pie šāda reisinājuma, neesmu īsti drošs vai tur nav kādu nepamanītu problēmu:
#include <iostream>
using namespace std;
class d2array{
public:
class row{
public:
int a[10];
row(){
a[0]=a[1]=a[2]=a[3]=a[4]=a[5]=a[6]=a[7]=a[8]=a[9]=a[10]=0;
}
int& operator[](int c){
return a[c];
}
};
row b[10];
row& operator[](int c){
return b[c];
}
};
int main(void){
d2array z;
z[1][2]=7;
z[2][3]=3;
cout<<z[1][2]<<" "<<z[2][3]<<" "<<z[0][0];
system("PAUSE");
}
Tas protams tikai tāds kods ar statisku intu arrayu, bet ja ideja ir pareiza, tad tālāk jau nav problēmu taisīt cik dimensiju arrajus grib ar ka'diem vien datiem grib...
Žēl tikai ka nenonācu pie kautkā labāka...varbūt kādam kādas idejas? _________________ <..=*=.._..=[Krisa Tm]=.._..=*=..> |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Thu Mar 23, 2006 2:53 pm Post subject: |
|
Ja nav iebildumu overloadot () operatoru tad kautkā šādi:
Code: | int operator()(int row, int column) {
...
} |
Un tad kodā vienkārši rakstīt: int i = uubermasiivs(3,4);
Veel var darīt kautko šādu:
Code: | struct idx { int row; int column; idx(int r, int c) : row(r), column(c) {} };
...
int operator[] (const index& idx) {
// te lietot idx.row, idx.column
} |
un tad kodā: int i = uubermasiivs[idx(3,4)];
Nezinu vai iespējams, kas labāks. Tavs gadījums man nepatīk tādā ziņā, ka row'i ir atsevšķi objekti, un tiem var salikt dažādus garumus. Tur jāuzmanās. It kā jau labāk būtu ar šādu masīvu operēt vienāo objektā. Bet citādi jau nav ne vainas. |
|
Back to top |
|
|
GiGa Indago Uzvarētājs
Joined: 25 Sep 2003 Posts: 887
|
Posted: Thu Mar 23, 2006 3:10 pm Post subject: |
|
No manas puses ieteikums vai nu, kaa bubu saka, izmantot operator(), vai arii vienkaarshi kaut kaadu funkciju GetVal(x,y);
Bet ja nu tev OBLIGAATI IR jaaoverloado, tad taveejais variants laikam ir vieniigais iespejamais, ja grib iztikt bez atseviskjas struktuuras (kaa bubu otrajaa piemeeraa). |
|
Back to top |
|
|
krisa
Joined: 17 Aug 2004 Posts: 15
|
Posted: Thu Mar 23, 2006 3:12 pm Post subject: |
|
nu jaa..vienkārši gribējās lai uz ārpusi maksimāli lietojas kā parasts masīvs tipa darbojas gan int i=mas[x][y];
gan arī mas[x][y]=5; _________________ <..=*=.._..=[Krisa Tm]=.._..=*=..> |
|
Back to top |
|
|
BHC
Joined: 31 Jan 2006 Posts: 81
|
Posted: Thu Mar 23, 2006 3:24 pm Post subject: |
|
Cildinot slinkumu:
Code: |
std::vector< std::vector< int > > d2arr;
std::vector< int > arr;
d2arr.push_back( arr );
d2arr[ 0 ].push_back( 0 );
d2arr[ 0 ][ 0 ] = 42;
// Vai arī uzreiz resaizojam pēc vajadzīgā izmēra
|
Es pilnīgi piekrītu, ka neērts un ne labākais variants.
Bet ātri uzstādāms gan.
Ja vajag norādi uz elementu, tad lietojam
std::vector< std::vector< auto< int > > >;
Auto ir kaut kāda smart pointera šablon klase.
Un std::vector var aizvietot ar savu dinamiskā 1d masīva šablon klasi, ja nepieciešams. _________________ Screenshot coming when hell freezes over. |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Thu Mar 23, 2006 3:30 pm Post subject: Re: masīva operatora pārslogošana C++ |
|
BHC:
krisa wrote: | Doma, ka gribu uztaisīt 2d masīvu, kur katrs elements ir 2bitus liels. |
Ja jau autors tā saka, tad jau tas acīmredzot nozīmē, ka vajadzīgs taupīt vietu, un ar vector būtu tā kā par izšķērdīgu. Tad jau drīzāk jānomanto bitset klase un jāuzraksta savs [] operators piekļūšanai tā elementiem pa pārīšiem.
Last edited by bubu on Thu Mar 23, 2006 3:34 pm; edited 1 time in total |
|
Back to top |
|
|
BHC
Joined: 31 Jan 2006 Posts: 81
|
Posted: Thu Mar 23, 2006 3:32 pm Post subject: Re: masīva operatora pārslogošana C++ |
|
bubu wrote: | BHC:
krisa wrote: | Doma, ka gribu uztaisīt 2d masīvu, kur katrs elements ir 2bitus liels. |
Ja jau ators tā saka, tad jau tas acīmredzot nozīmē, ka vajadzīgs taupīt vietu, un ar vector būtu tā kā par izšķērdīgu. Tad jau drīzāk jānomanto bitset klase un jāuzraksta savs [] operators piekļūšanai tā elementiem pa pārīšiem. |
Tā iet, ka nelasa, ko cilvēks raksta. :/ _________________ Screenshot coming when hell freezes over. |
|
Back to top |
|
|
|