Iterators
STL zařízení využívat rozšířených u iterátorů prostředníka mezi různé algoritmy a posloupnosti, na kterých působí.Název typu iterační (nebo jeho předpony) označuje kategorie pro daný typ u iterátorů.V pořadí zvýšení spotřeby jsou shrnuty do kategorií jako:
Výstup.Iterace výstup X může mít pouze hodnotu V uloženy nepřímé, po kterých se musí zvýšen před další úložiště, jako v (*X++ = V), (*X = V, ++X), nebo (*X = V, X++).
Vstup.Vstupní iterační X může představovat singulární hodnotu, která označuje konec posloupnosti.Pokud vstupní iterační neporovnává rovná hodnotě jeho konec číselné řady, může mít hodnotu V přístup na něj nepřímé libovolný počet, jako v (V = *X).Chcete-li v průběhu další hodnotu nebo koncové sekvence, můžete zvýšit, jako v ++X, X++, nebo (V = *X++).Jakmile bude zvýšit všechny kopie vstupní iterace, žádná další kopie lze bezpečně porovnat, dereferenced nebo vzrůstajícími poté.
Vpřed.Vpřed iterační X může probíhat iterace výstup pro zápis nebo vstupní iterace pro čtení.Však můžete číst (prostřednictvím V = *X) co jste právě napsali (prostřednictvím *X = V) prostřednictvím dopředu iterace.Můžete také vytvářet více kopií dopředu iterace, které dereferenced a zvýšena nezávisle.
Obousměrné.Obousměrný iterační X může probíhat předávání iterace.Je možné, však také trase obousměrných iterace, jako v--X, X--, nebo (V = *X--).
Náhodný přístup.Iterační random access X může probíhat iterační obousměrné.Můžete také provést mnohem stejné číslo aritmetické na iterační náhodný přístup, který lze na ukazatel objektu.For N, an integer object, you can write xN,x + N,x - N, and N + X.
Všimněte si, že ukazatel objektu může být na místě iterační random access nebo jiné iterační.U iterátorů všechny lze přiřadit nebo kopírovat.Jsou považovány za zjednodušené objekty a jsou často předána a vrácené hodnoty, není odkazem.Všimněte si také, že žádná operace popsané dříve může vyvolat výjimku, při provádění v platné iterace.
Hierarchie kategorií iterace lze shrnout zobrazením tří řad.Přístup jen pro zápis k 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ýstup iterace pracují byly pěkně dopředu iterační například ale není opačným způsobem.
Přístup jen pro čtení k sekvence můžete použít některý z:
input iterator
-> forward iterator
-> bidirectional iterator
-> random-access iterator
Vstupní iterace je v tomto případě nejslabších všech kategorií.
Konečně přístup pro čtení i zápis k sekvence, můžete použít některý z:
forward iterator
-> bidirectional iterator
-> random-access iterator
Ukazatel objektu vždy sloužit jako náhodný přístup iterace, takže mohou sloužit jako jakékoliv kategorie iterační Pokud podporuje přístup ke čtení a zápisu v řádné pořadí, které určí.
Iterace Iterator než objekt ukazatel musí definovat typy členů vyžadované specializace iterator_traits<Iterator>.Všimněte si, že tyto požadavky lze splnit vyplývající Iterator z veřejné základní třídy iterační.
Tato "algebra" u iterátorů je zásadní, aby prakticky všechno ostatní standardní šablonu knihovny.Je důležité porozumět sliby a omezení každé kategorie iterační viz použití u iterátorů kontejnerů a algoritmy STL.
[!POZNÁMKA]
Můžete také použít pro každý v k iterování kolekce STL.Další informace naleznete v tématu Jak: iteraci v kolekci STL pro každou.
Visual C++nyní nabízí kontrolovány u iterátorů a ladění u iterátorů zajistit Nepřepisovat hranice do kontejneru.Další informace naleznete v tématu Zaškrtnuté iterátory a Iterační podpory ladění.