Udostępnij za pośrednictwem


Iteratory

Udogodnienia STL sprawiają powszechność Iteratory do pośredniczą między różne algorytmy i sekwencji, na których działają.Nazwa typu iteratora (lub jego prefiksu) wskazuje kategorii Iteratory wymaganych dla danego typu.W celu zwiększenia mocy, kategorie są podsumowywane jako:

  • Dane wyjściowe.Iterację wyjścia X może mieć tylko wartość V przechowywane pośrednich na nim, po którym się musi jest zwiększany przed następnym magazynu, podobnie jak w przypadku (*X++ = V), (*X = V, ++X), lub (*X = V, X++).

  • Dane wejściowe.Wejściowy iterację X może reprezentować pojedynczą wartość, która wskazuje koniec sekwencji.Jeśli iteratora wejściowe nie porównuje równa wartości jego koniec sekwencji, mogą mieć wartość V dostęp pośredni na nim dowolną liczbę razy, jak w (V = *X).Aby przejść do następnego wartość lub koniec sekwencji, inkrementacji, podobnie jak w przypadku ++X, X++, lub (V = *X++).Po inkrementacji żadnej kopii wejściowych iterację Brak pozostałe kopie można bezpiecznie porównać, dereferenced lub przyrostowo po tej dacie.

  • Do przodu.Do przodu sterująca X mogą mieć miejsce iterację wyjściowego do zapisu lub iteratora wejściowego do czytania.Jednak można odczytać (przez V = *X) co właśnie napisał (za pośrednictwem *X = V) poprzez sterująca do przodu.Można również tworzyć kopie sterująca do przodu, z których każdy można usunąć odwołania i zwiększany niezależnie od siebie.

  • Dwukierunkowy.Sterująca dwukierunkowy X mogą mieć miejsce sterująca do przodu.Użytkownik może jednak również dekrementacja sterująca dwukierunkowe, jak w--X, X--, lub (V = *X--).

  • O dostępie.Sterująca dostępie losowym X mogą mieć miejsce sterująca dwukierunkowego.Można również wykonać wiele tej samej liczby całkowitej arytmetyczne na sterująca dostępie losowym, które są dostępne na wskaźnik do obiektu.For N, an integer object, you can write xN,x + N,x - N, and N + X.

Należy zwrócić uwagę, że wskaźnik do obiektu może mieć miejsce sterująca dostępie losowym lub innych iteratora.Wszystkie Iteratory mogą być przypisane lub kopiowane.Są przyjmowane jako obiekty lekkie i są one często przekazywane i zwrócony przez wartość, nie przez odwołanie.Należy zauważyć, że żadna z operacji opisanych wcześniej rzucać wyjątek podczas na prawidłowe iteratora.

Hierarchia kategorii iteratora mogą być podsumowywane przez pokazanie trzech sekwencji.Dostępu tylko do zapisu do sekwencji można użyć innych:

output iterator
   -> forward iterator
   -> bidirectional iterator
   -> random-access iterator

Strzałka w prawo oznacza "można zastąpić." Dowolny algorytm, który wywołuje dla iteratora dane wyjściowe powinny działać ładnie sterująca do przodu, na przykład, ale nie na odwrót.

Uzyskać dostęp tylko do odczytu do sekwencji można użyć innych:

input iterator
   -> forward iterator
   -> bidirectional iterator
   -> random-access iterator

Wejściowy iteratora jest w tym przypadku najsłabsze wszystkich kategorii.

Wreszcie dla dostępu do odczytu i zapisu do sekwencji, można użyć dowolnego z:

forward iterator
   -> bidirectional iterator
   -> random-access iterator

Wskaźnik do obiektu zawsze może służyć jako sterująca random access, dzięki czemu może służyć jako którejkolwiek kategorii sterująca czy obsługuje dostęp do odczytu/zapisu do sekwencji wyznaczanych.

Iterację Iterator innych niż obiekt wskaźnika musi również zdefiniować typy Członkowskie wymagane przez specjalizacja iterator_traits<Iterator>.Należy zauważyć, że te wymagania mogą być spełnione przez wynikających Iterator z publicznych klasy bazowej sterująca.

To "algebraiczną" Iteratory ma zasadnicze znaczenie dla praktycznie wszystko inne biblioteki standardowej szablonu.Jest ważne, aby zrozumieć obietnic i ograniczenia związane z każdej kategorii sterująca, aby zobaczyć, jak Iteratory są używane pojemniki i algorytmy w STL.

[!UWAGA]

Można również użyć for each, in do iteracyjne przeglądanie zbiorów STL.Aby uzyskać dodatkowe informacje, zobacz Iterowanie przez kolekcję STL za pomocą instrukcji for each.

Visual C++teraz oferuje sprawdzone Iteratory oraz Iteratory debugowania w celu zapewnienia nie zastępuj granice pojemnika.Aby uzyskać więcej informacji, zobacz Zaznaczone iteratory i Obsługa iteratora debugowania.

Zobacz też

Informacje

Standardowa biblioteka szablonów

Bezpieczeństwo wątku w standardowej bibliotece C++