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


checked_array_iterator Class

checked_array_iterator Позволяет преобразовать массив или указатель в проверяемый итератор.

ПримечаниеПримечание

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

template <class _Iterator>
    class checked_array_iterator
        : public iterator<
            typename iterator_traits<_Iterator>::iterator_category, 
            typename iterator_traits<_Iterator>::value_type, 
            typename iterator_traits<_Iterator>::difference_type, 
            typename iterator_traits<_Iterator>::pointer, 
            typename iterator_traits<_Iterator>::reference>

Заметки

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

Дополнительные сведения об установленном итераторов, см. Проверяемые итераторы.

Пример

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

Если назначение не достаточный для размещения всех копируемых элементов, таких как будет при изменении строки:

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

в

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

Произойдет ошибка времени выполнения.

// checked_array_iterator_overview.cpp
// compile with: /EHsc
#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 вместо динамически выделяемый массива.В следующем примере показано, как это сделать.

// checked_array_iterator_2.cpp
// compile with: /EHsc

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

Aa985928.collapse_all(ru-ru,VS.110).gifКонструкторы

checked_array_iterator

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

Aa985928.collapse_all(ru-ru,VS.110).gifОпределения типов

difference_type

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

указатели

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

Ссылка

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

Aa985928.collapse_all(ru-ru,VS.110).gifФункции-члены

base

Восстанавливает базовый итератор из его checked_array_iterator.

Aa985928.collapse_all(ru-ru,VS.110).gifОператоры

оператор ==

Проверяет две checked_array_iterators на равенство.

оператор! =

Проверяет две checked_array_iterators на неравенство.

оператор <

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

оператор >

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

оператор < =

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

оператор > =

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

operator*

Возвращает элемент, checked_array_iterator адресов.

operator->

Возвращает указатель на элемент, по checked_array_iterator.

operator++

С шагом checked_array_iterator к следующему элементу.

оператор--

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

оператор +=

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

оператор +

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

оператор-=

Уменьшает значение указанного смещения от checked_array_iterator.

оператор-

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

operator[]

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

Требования

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

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

См. также

Ссылки

Стандартная библиотека шаблонов

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

члены<iterator>

члены checked_array_iterator