Sdílet prostřednictvím


checked_array_iterator – třída

Třída checked_array_iterator umožňuje převést pole nebo ukazatel na kontrolovaný iterátor.Použijte tuto třídu jako obálku (pomocí funkce make_checked_array_iterator) pro nezpracované ukazatele nebo pole jako cílený způsob, jak poskytnout kontrolu a spravovat nezkontrolovaná upozornění ukazatele namísto globálního umlčení těchto upozornění.V případě potřeby můžete použít nekontrolovanou verzi této třídy unchecked_array_iterator.

[!POZNÁMKA]

Tato třída je rozšířením společnosti Microsoft pro standardní knihovnu jazyka C++.Kód implementovaný pomocí této funkce není přenosný do standardního prostředí pro sestavování v jazyce C++, která toto rozšíření společnosti Microsoft nepodporují.Jak napsat kód, který nevyžaduje použití této třídy, viz druhý příklad.

template <class _Iterator>
    class checked_array_iterator;

Poznámky

Tato třída je definována v oboru názvů stdext.

Další informace o funkci kontrolovaného iterátoru a ukázku kódu získáte v tématu Checked – iterátory.

Příklad

Následující příklad ukazuje, jak definovat a používat iterátor zkontrolovaného pole.

Pokud cíl není dostatečně velký pro všechny prvky, které jsou kopírovány, jako by tomu bylo při změně řádku:

copy(a, a + 5, checked_array_iterator<int*>(b, 5));

copy(a, a + 5, checked_array_iterator<int*>(b, 4));

Dojde k chybě modulu runtime.

// compile with: /EHsc /W4 /MTd
#include <algorithm>
#include <iostream>

using namespace std;
using namespace stdext;

int main() {
   int a[]={0, 1, 2, 3, 4};
   int b[5];
   copy(a, a + 5, checked_array_iterator<int*>(b, 5));

   cout << "(";
   for (int i = 0 ; i < 5 ; i++)
      cout << " " << b[i];
   cout << " )" << endl;

   // constructor example
   checked_array_iterator<int*> checked_out_iter(b, 5);
   copy(a, a + 5, checked_out_iter);

   cout << "(";
   for (int i = 0 ; i < 5 ; i++)
      cout << " " << b[i];
   cout << " )" << endl;
}
  

Chcete-li se vyhnout potřebě třídy checked_array_iterator při použití algoritmů standardní knihovny C++, zvažte použití vector místo dynamicky přiřazeného pole.Následující příklad demonstruje, jak to udělat.

// compile with: /EHsc /W4 /MTd

#include <algorithm>
#include <iostream>
#include <vector>

using namespace std;

int main()
{
    std::vector<int> v(10);
    int *arr = new int[10];
    for (int i = 0; i < 10; ++i)
    {
        v[i] = i;
        arr[i] = i;
    }

    // std::copy(v.begin(), v.end(), arr); will result in
    // warning C4996. To avoid this warning while using int *,
    // use the Microsoft extension checked_array_iterator.
    std::copy(v.begin(), v.end(),
              stdext::checked_array_iterator<int *>(arr, 10));

    // Instead of using stdext::checked_array_iterator and int *,
    // consider using std::vector to encapsulate the array. This will
    // result in no warnings, and the code will be portable.
    std::vector<int> arr2(10);    // Similar to int *arr = new int[10];
    std::copy(v.begin(), v.end(), arr2.begin());

    for (int j = 0; j < arr2.size(); ++j)
    {
        cout << " " << arr2[j];
    }
    cout << endl;

    return 0;
}
  

Konstruktory

checked_array_iterator

Vytvoří výchozí checked_array_iterator nebo checked_array_iterator z podkladové iterace.

Typedefs

difference_type

Typ, který obsahuje rozdíl mezi dvěma checked_array_iterator, které odkazují na prvky v rámci stejného kontejneru.

ukazatel

Typ, který poskytuje ukazatel na prvek řešený třídou checked_array_iterator.

reference

Typ, který poskytuje odkaz na prvek řešený třídou checked_array_iterator.

Členské funkce

base

Obnoví základní iterátor z checked_array_iterator.

Operátory

operator==

Testuje dva iterátory checked_array_iterator na rovnost.

operator!=

Testuje dva iterátory checked_array_iterator na nerovnost.

operator<

Testuje, zda je checked_array_iterator na levé straně operátoru menší než checked_array_iterator na pravé straně.

operator>

Testuje, zda je checked_array_iterator na levé straně operátoru větší než checked_array_iterator na pravé straně.

operator<=

Testuje, zda je checked_array_iterator na levé straně operátoru menší než nebo rovno checked_array_iterator na pravé straně.

operator>=

Testuje, zda je checked_array_iterator na levé straně operátoru větší než nebo rovno checked_array_iterator na pravé straně.

operator*

Vrátí prvek, na který odkazuje checked_array_iterator.

operator->

Vrací ukazatel na prvek odkazovaný checked_array_iterator.

operator++

Zvýší checked_array_iterator na další prvek.

operator--

Sníží checked_array_iterator na předchozí prvek.

operator+=

Přidá zadaný posun k checked_array_iterator.

operator+

Přidá posun do iterátoru a vrátí nový checked_array_iterator adresující vložený prvek na nové pozici posunu.

operator-=

Sníží zadaný posun z checked_array_iterator.

operator-

Sníží posun z iterátoru a vrátí nový checked_array_iterator adresující vložený prvek na nové pozici posunu.

operátor[]

Vrátí odkaz na posun prvku z prvku odkazovaného checked_array_iterator o určený počet pozic.

Požadavky

Hlavička: <iterator>

Obor názvů: stdext

Viz také

Referenční dokumentace

<iterator>

Standardní knihovna šablon

Další zdroje

checked_array_iterator členů