ceeyt
02/05/2004, 02:43
ic ice vektorler yerlestirmek(bu ic ice yerlestirme olayina taktim heralde :tamams: ) icin asagıdaki gibi biseyler yazdim.
class y{
public:
y(const int &n1,const int &n2):n_1(n1),n_2(n2){}
int n_1;
int n_2;
};
int main(int argc, char* argv[])
{
int n1,n2;
vector<y> y_vec;
vector<y> *p =new vector<y>();
vector<vector<y>*> vec_vec;
n1=1;
n2=2;
p->push_back(y(n1,n2));
vec_vec.push_back(p);
cout << (*vec_vec.begin())->begin()->n_1
<<" - ";
cout << (*vec_vec.begin())->begin()->n_2;
vector<y>::iterator y_itr;
vector<vector<y>*>::iterator vecvec_itr;
y_itr=vecvec.begin();
vecvec_itr=vec_vec.begin();
return 0;
}
x-y dorularina paralel yerlestirilmis iki vektor gibi.ana vektorun elemanlari baska vektorler.Ana vektorun ilk elemani olan vektorun ilk elemanina ki bu da iki int tutan bir class erismek icin
*(vec_vec.begin)->begin()->n_1 ise yariyor.
buraya kadar guzelde diger elemanlar icin durum biraz karisiyor.Her elemana erismek icin biri ana vektorde biri alt vektorlerde hareket eden iki vektor dusunursek;
*(vec_vec.begin())->begin()->n_1 isini yapan ,ana vektorun ilk elemani olan vektorun ilk elamanina erisecek her iki iteratorunde adresleri ana vektorun baslangic adresi ( vecvec.begin() ) mi olacak?Bu durumda *vecvec_itr-> dedigimde eleman vektorunun tuttugu sınıf icindeki degiskenlere ulasabiliyor olmam gerekmez mi?
cout <<*vecvec_itr->n_1; gibi.Ama olmuyor...
Ayrica ana vektorun ikinci elemani olan vektorun diyelim ki 4. elemanina erismek istiyoruzBu durumda
y_itr=vec_vec.begin()+1;
*(y_itr+3)->n_1; *(y_it+3)->n_2; olmali diye dusunuyorum ama olmuyor dmek ki yanlis....
Dusunelim ki ana vektorun ilk elemani olan vektore bir seyler ekledik.Sonra ana vektorun ikinci elamanina bir seyler ekledik.Bu durumda ana vektorun ikinci elemani olan vektorun baslangic adresini ana vektorun baslangic adresi+1 dediysek.(vec_vec.begin()+1)
burada ana vektorun ikinci elemani icin iteratorunun degeri ilk elemanda tutulan bilginin buyuklugune bagli olarak mi artar?Yani
(vec_vec.begin()+1) - vec_vec.begin() = ilk eleman olan vektordeki bilgiye bagli bellek araligi.
Boyleyse herhangi bir elemana erismeden once mutlaka her seferinde eleman olan vektorlerin ana vektorun balangic adresine gore degismis adreslerine ihtiyacimiz olacak.
derdime deva olsun diye asagidaki gibi bir sey kullanmak istedim ayni sorunlar burda da var.
class y {
public:
int n_1;
int n_2;
};
class yy {
public:
vector<y> y_vec;
vector<y>::iterator yvec_itr;
};
class yyy {
public:
vector<yy> vec_vec;
vector<yy>::iterator vecvec_itr;
};
int main(int argc, char* argv[])
{
y Y;
yy YY;
yyy YYY;
Y.n_1=1;
Y.n_2=2;
YY.y_vec.push_back(Y);
YYY.vec_vec.push_back(YY);
Y.n_1=3;
Y.n_2=4;
cout << YYY.vec_vec.begin()->y_vec.begin()->n_1
<< " - ";
cout << YYY.vec_vec.begin()->y_vec.begin()->n_2;
return 0;
}
ana vektorun ilk elemani olan vektorun ilk elemani icin her sey guzel de iteratorlerle yapamaya kalkinca....
anlatmak istediklerimi buyuk ihtimalle anlatamadim,ama olsun.
sabir gosterip buraya kadar okuduysaniz tesekkur ederim...
class y{
public:
y(const int &n1,const int &n2):n_1(n1),n_2(n2){}
int n_1;
int n_2;
};
int main(int argc, char* argv[])
{
int n1,n2;
vector<y> y_vec;
vector<y> *p =new vector<y>();
vector<vector<y>*> vec_vec;
n1=1;
n2=2;
p->push_back(y(n1,n2));
vec_vec.push_back(p);
cout << (*vec_vec.begin())->begin()->n_1
<<" - ";
cout << (*vec_vec.begin())->begin()->n_2;
vector<y>::iterator y_itr;
vector<vector<y>*>::iterator vecvec_itr;
y_itr=vecvec.begin();
vecvec_itr=vec_vec.begin();
return 0;
}
x-y dorularina paralel yerlestirilmis iki vektor gibi.ana vektorun elemanlari baska vektorler.Ana vektorun ilk elemani olan vektorun ilk elemanina ki bu da iki int tutan bir class erismek icin
*(vec_vec.begin)->begin()->n_1 ise yariyor.
buraya kadar guzelde diger elemanlar icin durum biraz karisiyor.Her elemana erismek icin biri ana vektorde biri alt vektorlerde hareket eden iki vektor dusunursek;
*(vec_vec.begin())->begin()->n_1 isini yapan ,ana vektorun ilk elemani olan vektorun ilk elamanina erisecek her iki iteratorunde adresleri ana vektorun baslangic adresi ( vecvec.begin() ) mi olacak?Bu durumda *vecvec_itr-> dedigimde eleman vektorunun tuttugu sınıf icindeki degiskenlere ulasabiliyor olmam gerekmez mi?
cout <<*vecvec_itr->n_1; gibi.Ama olmuyor...
Ayrica ana vektorun ikinci elemani olan vektorun diyelim ki 4. elemanina erismek istiyoruzBu durumda
y_itr=vec_vec.begin()+1;
*(y_itr+3)->n_1; *(y_it+3)->n_2; olmali diye dusunuyorum ama olmuyor dmek ki yanlis....
Dusunelim ki ana vektorun ilk elemani olan vektore bir seyler ekledik.Sonra ana vektorun ikinci elamanina bir seyler ekledik.Bu durumda ana vektorun ikinci elemani olan vektorun baslangic adresini ana vektorun baslangic adresi+1 dediysek.(vec_vec.begin()+1)
burada ana vektorun ikinci elemani icin iteratorunun degeri ilk elemanda tutulan bilginin buyuklugune bagli olarak mi artar?Yani
(vec_vec.begin()+1) - vec_vec.begin() = ilk eleman olan vektordeki bilgiye bagli bellek araligi.
Boyleyse herhangi bir elemana erismeden once mutlaka her seferinde eleman olan vektorlerin ana vektorun balangic adresine gore degismis adreslerine ihtiyacimiz olacak.
derdime deva olsun diye asagidaki gibi bir sey kullanmak istedim ayni sorunlar burda da var.
class y {
public:
int n_1;
int n_2;
};
class yy {
public:
vector<y> y_vec;
vector<y>::iterator yvec_itr;
};
class yyy {
public:
vector<yy> vec_vec;
vector<yy>::iterator vecvec_itr;
};
int main(int argc, char* argv[])
{
y Y;
yy YY;
yyy YYY;
Y.n_1=1;
Y.n_2=2;
YY.y_vec.push_back(Y);
YYY.vec_vec.push_back(YY);
Y.n_1=3;
Y.n_2=4;
cout << YYY.vec_vec.begin()->y_vec.begin()->n_1
<< " - ";
cout << YYY.vec_vec.begin()->y_vec.begin()->n_2;
return 0;
}
ana vektorun ilk elemani olan vektorun ilk elemani icin her sey guzel de iteratorlerle yapamaya kalkinca....
anlatmak istediklerimi buyuk ihtimalle anlatamadim,ama olsun.
sabir gosterip buraya kadar okuduysaniz tesekkur ederim...