dev.gamez.lv Forum Index dev.gamez.lv
Latvian Game Developers Community
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups 

masīva operatora pārslogošana C++

 
dev.gamez.lv Forum Index -> Programmēšana
View previous topic :: View next topic  
Author Message
krisa



Joined: 17 Aug 2004
Posts: 15

PostPosted: 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
View user's profile Send e-mail
Kamazs
Guru
Guru


Joined: 17 Jan 2003
Posts: 829
Location: The glorious ancient city of Loja

PostPosted: Thu Mar 23, 2006 2:05 pm    Post subject:

Pārslogot... overload?
_________________
...un es uzskatu, ka Fallout ir etalons
Back to top
View user's profile Send e-mail Visit poster's website
krisa



Joined: 17 Aug 2004
Posts: 15

PostPosted: 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
View user's profile Send e-mail
krisa



Joined: 17 Aug 2004
Posts: 15

PostPosted: 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
View user's profile Send e-mail
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: 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
View user's profile Send e-mail
GiGa
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 25 Sep 2003
Posts: 887

PostPosted: 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
View user's profile Send e-mail
krisa



Joined: 17 Aug 2004
Posts: 15

PostPosted: 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
View user's profile Send e-mail
BHC



Joined: 31 Jan 2006
Posts: 81

PostPosted: 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
View user's profile
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: 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
View user's profile Send e-mail
BHC



Joined: 31 Jan 2006
Posts: 81

PostPosted: 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
View user's profile
Display posts from previous:   
dev.gamez.lv Forum Index -> Programmēšana All times are GMT + 2 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group