Sdílet prostřednictvím


Iterátory

Zařízení STL nastavit použití iterátorů roli prostředníka mezi různé algoritmy a posloupnosti, na kterých působí.Název typu iterator (nebo jeho předpony) označuje kategorie iterátory, potřebné pro tento typ.V pořadí zvýšení spotřeby jsou shrnuty kategorie jako:

  • Výstup.Výstupní iterace X může mít pouze hodnotu V nepřímé, po němž je uložen musí být zvýšena před další úložiště, jako v (*X++ = V), (*X = V, ++X), nebo (*X = V, X++).

  • Vstup.Vstupní iterátor X může představovat singulární hodnotu, která označuje konec sekvence.Pokud vstupní iterátor neporovnává rovnající se jeho hodnota koncové sekvence, může mít hodnotu V nepřímé na něj přistupovat libovolný počet krát v (V = *X).K pokroku na další hodnoty nebo ukončení sekvence, je zvyšování hodnoty, jako v ++X, X++, nebo (V = *X++).Jakmile bude zvýšit všechny kopie vstupní iterátor, žádné další kopie je možné bezpečně porovnat, přímo odkázat, nebo zvyšující poté.

  • Dopředu.Přední iterátor X může probíhat iterace pro zápis výstupu nebo vstupu iterátor pro čtení.Však můžete číst (prostřednictvím V = *X) co jste napsali (prostřednictvím *X = V) prostřednictvím vpřed iterace.Můžete také vytvářet více kopií vpřed iterace, každý z nich přímo odkázat a zvyšuje nezávisle.

  • Obousměrné.Obousměrný iterátor X může probíhat vpřed iterace.Je možné, však také sníží obousměrný iterátor, jako v -X, X--, nebo (V = *X--).

  • Náhodný přístup.Random access iterační X může probíhat obousměrný iterátor.Můžete také provést mnohem stejné celočíselná aritmetika na iterační náhodný přístup, který můžete na ukazatel objekt.For N, an integer object, you can write xN,x + N,x - N, and N + X.

Všimněte si, že ukazatel objekt může být na místě random access iterační nebo jiné iterace.Všechny u iterátorů lze přiřadit nebo kopírovat.Jsou považovány za zjednodušené objekty a jsou často předány a vrácené hodnoty, nikoli odkazem.Všimněte si také, že žádný z výše popsané operace vyvoláním výjimky při provádění v platné iterátor.

Hierarchie kategorií iterátor mohou být sumarizovány zobrazením tří řad.Pro přístup jen pro zápis do sekvence můžete použít některý z:

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

Šipka doprava se rozumí "může být nahrazen." Libovolný algoritmus, který volá pro výstupní iterace by měly fungovat například úhledně zarovnány s dopředu iterace, ale Ne opačným způsobem.

Jen pro čtení přístup k sekvence můžete použít některý z:

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

Vstupní iterátor je v tomto případě nejslabších všech kategorií.

Nakonec pro čtení a zápis do sekvence, můžete použít některý z:

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

Ukazatel objekt může sloužit jako iterační náhodný přístup, vždy tak může sloužit jako všechny kategorie iterátor, pokud podporuje správné čtení a zápis přístup k pořadí, které určí.

Iterace Iterator než objekt ukazatel třeba definovat typy členů vyžadované specializace iterator_traits<Iterator>.Všimněte si, že tyto požadavky mohou být splněny odvozením Iterator ze základní třídy veřejné iterátor.

Tento "algebra" u iterátorů je zásadní, aby prakticky všechno ostatní v knihovně Standard Template Library.Je důležité porozumět sliby a omezení každého iterátoru kategorie naleznete v tématu Použití iterátorů kontejnery a algoritmy v STL.

[!POZNÁMKA]

Můžete také použít pro každý v k iterování inkasa na STL.Další informace naleznete v tématu Jak: iteraci v kolekci STL pro každou.

Visual C++nyní nabízí kontrolovány zajistit hranice váš kontejner nepřepsaly iterátory a ladění u iterátorů.Další informace naleznete v tématu Checked – iterátory a Podpora ladění iterátorů.

Viz také

Referenční dokumentace

Standardní knihovna šablon

Bezpečný přístup z více vláken ve standardní knihovně C++