Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Iterator

Ostatnio zmodyfikowano 2017-11-16 14:47
Autor Wiadomość
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ę:

C/C++
#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ć?
P-166907
pekfos
» 2017-11-16 13:45:09
A odejmowanie wskaźników co oznacza?
P-166909
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 ;> ^^
P-166910
Anim
Temat założony przez niniejszego użytkownika
» 2017-11-16 14:06:45
Chociaż jednak chyba nie rozumiem... ;p

Powiedzmy mam kod:

C/C++
#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(?).
P-166912
pekfos
» 2017-11-16 14:24:09
Odejmowanie dwóch wskaźników, nie wskaźnika i liczby.
» Kurs C++ » Poziom XWskaźniki lekcja

To z przekory jeszcze spytam, dlaczego ta sama operacja nie działa, gdy zamienię wektor na listę?
Iteratory wektora są dostępu swobodnego, z listy są dwukierunkowe.
http://en.cppreference.com/w​/cpp/concept​/RandomAccessIterator
P-166913
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 :)
P-166914
« 1 »
  Strona 1 z 1