Поделиться через


Класс checked_array_iterator

Класс checked_array_iterator предоставляет возможность преобразовать массив или указатель в проверенный итератор. Используйте этот класс в качестве оболочки (с помощью функции make_checked_array_iterator) для необработанных указателей или массивов, как способ целенаправленного выполнения проверки и управления непроверенными предупреждениями об указателях вместо глобального отключения данных предупреждений. При необходимости можно использовать непроверенная версию данного класса, unchecked_array_iterator.

Примечание

Этот класс является предоставляемым Microsoft расширением стандартной библиотеки C++.Код, реализованный с помощью этой функции, нельзя перенести в стандартные среды сборки C, не поддерживающие это расширение Microsoft.Пример создания кода, не требующего использования данного класса — это второй пример, представленный ниже.

template <class _Iterator>
    class checked_array_iterator;

Заметки

Этот класс определяется в пространстве имен stdext.

Дополнительные сведения и пример кода функции проверяемого итератора см. в разделе Проверяемые итераторы.

Пример

В следующем примере показано, как задать и использовать проверенный итератор массива.

Если назначение не может вместить все скопированные элементы (например, в случае изменения строки):

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

в

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

Произойдет ошибка исполняющей среды.

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

Чтобы исключить потребность в применении класса checked_array_iterator при использовании алгоритмов стандартной библиотеки C++, попробуйте применить vector вместо динамически выделяемого массива. В следующем примере показано, как это сделать.

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

Конструкторы

checked_array_iterator

Формирование итератора checked_array_iterator по умолчанию или итератора checked_array_iterator из базового итератора.

Определения типов

difference_type

Тип, обеспечивающий разницу между двумя итераторами checked_array_iterator, которые ссылаются на элементы в одном контейнере.

указатель

Тип, содержащий указатель на элемент, к которому обращается итератор checked_array_iterator.

reference

Тип, содержащий ссылку на элемент, к которому обращается итератор checked_array_iterator.

Функции-члены

base

Восстановление базового итератора из соответствующего итератора checked_array_iterator.

Операторы

operator==

Проверка двух итераторов checked_array_iterator на равенство.

operator!=

Проверка двух итераторов checked_array_iterator на неравенство.

operator<

Проверка на то, что итератор checked_array_iterator с левой стороны оператора меньше итератора checked_array_iterator с правой стороны.

operator>

Проверка на то, что итератор checked_array_iterator с левой стороны оператора больше итератора checked_array_iterator с правой стороны.

operator<=

Проверка на то, что итератор checked_array_iterator с левой стороны оператора меньше или равен итератору checked_array_iterator с правой стороны.

operator>=

Проверка на то, что итератор checked_array_iterator с левой стороны оператора больше или равен итератора checked_array_iterator с правой стороны.

operator*

Возвращение элемента, к которому обращается checked_array_iterator.

operator->

Возвращение указателя на элемент, к которому обращается checked_array_iterator.

operator++

Увеличение checked_array_iterator до следующего элемента.

operator--

Уменьшение checked_array_iterator до предыдущего элемента.

operator+=

Добавление заданного смещения к итератору checked_array_iterator.

operator+

Добавление смещения к итератору и возврат нового итератора checked_array_iterator, который обращается к вставленному элементу в новой позиции смещения.

operator-=

Уменьшение заданного смещения из checked_array_iterator.

operator-

Уменьшение смещения из итератора и возврат нового итератора checked_array_iterator, который обращается к вставленному элементу в новой позиции смещения.

operator[]

Возврат ссылки на смещение элемента из элемента, к которому обращается checked_array_iterator, на указанное число позиций.

Требования

Заголовок: <iterator>

Пространство имен: stdext

См. также

Ссылки

<iterator>

Библиотека стандартных шаблонов

Другие ресурсы

члены checked_array_iterator