checked_array_iterator — Klasa

Klasa checked_array_iterator umożliwia przekształcenie tablicy lub wskaźnika w sprawdzony iterator.Używaj tej klasy jako otoki (przy użyciu funkcji make_checked_array_iterator) dla surowych wskaźników lub tablic jako ukierunkowany sposób zapewnienia sprawdzania i zarządzania ostrzeżeniami o niesprawdzonych iteratorach zamiast globalnego wyciszania tych ostrzeżeń.Jeśli to konieczne, można użyć niesprawdzonej wersji tej klasy, unchecked_array_iterator.

[!UWAGA]

Ta klasa jest rozszerzeniem Microsoft standardowej biblioteki C++.Kod zaimplementowany przy użyciu tej funkcji nie jest przenośny do standardowych środowisk kompilacji C++, które nie obsługują tego rozszerzenia Microsoft.Aby uzyskać przykład pokazujący sposób pisania kodu, który nie wymaga użycia tej klasy, zobacz drugi przykład poniżej.

template <class _Iterator>
    class checked_array_iterator;

Uwagi

Ta klasa jest zdefiniowana w przestrzeni nazw stdext.

Aby uzyskać więcej informacji i przykładowy kod na temat funkcji sprawdzonego iteratora, zobacz Zaznaczone iteratory.

Przykład

Poniższy przykład pokazuje, jak zdefiniować i zastosować sprawdzony iterator tablicy.

Jeśli miejsce docelowe nie jest wystarczająco duże, aby pomieścić wszystkie kopiowane elementy, tak jak byłoby w przypadku zmiany wiersza:

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

na

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

Wystąpi błąd w czasie wykonywania.

// 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;
}
  

Aby uniknąć konieczności zastosowania klasy checked_array_iterator przy użyciu algorytmów standardowej biblioteki C++, rozważ stosowanie vector zamiast dynamicznie przydzielanej tablicy.Poniższy przykład demonstruje, jak to zrobić.

// 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

Tworzy domyślny checked_array_iterator lub checked_array_iterator z iteratora podstawowego.

Typedefs

difference_type

Typ, który zawiera różnicę między dwoma checked_array_iterator odwołującymi się do elementów w obrębie tego samego kontenera.

pointer

Typ, który zawiera wskaźnik do elementu, do którego odnosi się checked_array_iterator.

reference

Typ, który zawiera odwołanie do elementu, do którego odnosi się checked_array_iterator.

Funkcje elementów członkowskich

base

Odzyskuje podstawowy iterator z checked_array_iterator.

Operatory

operator==

Testuje dwa checked_array_iterator pod kątem równości.

operator!=

Testuje dwa checked_array_iterator pod kątem nierówności.

operator<

Testuje, czy checked_array_iterator po lewej stronie operatora jest mniejszy od checked_array_iterator po prawej stronie.

operator>

Testuje, czy checked_array_iterator po lewej stronie operatora jest większy od checked_array_iterator po prawej stronie.

operator<=

Testuje, czy checked_array_iterator po lewej stronie operatora jest mniejszy od lub równy checked_array_iterator po prawej stronie.

operator>=

Testuje, czy checked_array_iterator po lewej stronie operatora jest większy od lub równy checked_array_iterator po prawej stronie.

operator*

Zwraca element, do którego odnosi się checked_array_iterator.

operator->

Zwraca wskaźnik do elementu, do którego odnosi się checked_array_iterator.

operator++

Inkrementuje checked_array_iterator do następnego elementu.

operator--

Dekrementuje checked_array_iterator do poprzedniego elementu.

operator+=

Dodaje określone przesunięcie do checked_array_iterator.

operator+

Dodaje przesunięcie do iteratora i zwraca nowy checked_array_iterator odnoszący się do wstawionego elementu w nowym położeniu przesunięcia.

operator-=

Dekrementuje określone przesunięcie od checked_array_iterator.

operator-

Dekrementuje przesunięcie od iteratora i zwraca nowy checked_array_iterator odnoszący się do wstawionego elementu w nowym położeniu przesunięcia.

operator[]

Zwraca odwołanie do przesunięcia elementu z elementu, do którego odnosi się checked_array_iterator, o określoną liczbę pozycji.

Wymagania

Nagłówek: <iterator>

Przestrzeń nazw: stdext

Zobacz też

Informacje

<iterator>

Standardowa biblioteka szablonów

Inne zasoby

checked_array_iterator członkowie