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ů.