Anim Temat założony przez niniejszego użytkownika |
Iterator » 2017-11-16 13:28:27 Cały czas myślałem, że rozumiem jak działają iteratory. W pewien sposób utożsamiałem iterator z obiektem przechowującym adres. Ot, takie intuicyjne podejście. Teraz jestem prawie pewien, że jednak źle go rozumiem. A oto kod, który wprowadził mnie w konsternację: #include<iostream> #include<algorithm> #include<vector> using namespace std;
int main() { int tab[] = { - 9, - 6, - 1 }; int tab2[] = { - 9, - 6, 0 }; vector < int > wektor( tab, tab + 3 ); vector < int > wektor2( tab2, tab2 + 3 ); pair < vector < int >::iterator, vector < int >::iterator > para; para = mismatch( wektor.begin(), wektor.end(), wektor2.begin() ); cout << "Miejsce wylapanej roznicy: "; cout <<( para.first - wektor.begin() ) << " i " <<( para.second - wektor2.begin() ); return 0; }
Co oznacza odejmowanie iteratorów? Jak to interpretować? |
|
pekfos |
» 2017-11-16 13:45:09 A odejmowanie wskaźników co oznacza? |
|
Anim Temat założony przez niniejszego użytkownika |
» 2017-11-16 13:56:03 Odejmowanie wskaźników powoduje przesunięcie 'odjemnej' o wartość 'odjemnika' w lewo :)
Chyba rozumiem. To z przekory jeszcze spytam, dlaczego ta sama operacja nie działa, gdy zamienię wektor na listę? Oczywiście rozumiem, że to wektor, a nie lista gwarantuje kolejność ułożenia danych... ale w tym celu zostały stworzone iteratory, prawda? Żeby 'wiedziały', jak się poruszać po kontenerze (?)...
Jak bardzo moje rozumowanie jest błędne ;> ^^ |
|
Anim Temat założony przez niniejszego użytkownika |
» 2017-11-16 14:06:45 Chociaż jednak chyba nie rozumiem... ;p Powiedzmy mam kod: #include <iostream> using namespace std;
int main() { int tab[] = { 11, 22, 33, 44, 55 }, * p; p = & tab[ 0 ] + 3; cout << "*p = " << p << endl; }
To oczywiście jest dla mnie zrozumiałe. Jednak z tego o co pytasz oraz z powyższego przykładu wynikałoby, że iterator oprócz adresu musi przechowywać jakiś licznik. Przecież nie mogę wywołać samego it bądź wektor.begin(), bez operatora wyłuskania *. Co zwraca w takim razie iterator? To przecież nie jest tylko i wyłącznie wskaźnik(?). |
|
pekfos |
» 2017-11-16 14:24:09 |
|
Anim Temat założony przez niniejszego użytkownika |
» 2017-11-16 14:47:31 Ja to zawsze Was podziwiam (Ekspertów C++) :) Jak bardzo uważnie trzeba się uczyć C++, żeby to wszystko pamiętać :) Dziękować wielce :) Wszystko jasne :) |
|
« 1 » |