Класс 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, которые ссылаются на элементы в одном контейнере. |
|
Тип, содержащий указатель на элемент, к которому обращается итератор checked_array_iterator. |
|
Тип, содержащий ссылку на элемент, к которому обращается итератор checked_array_iterator. |
Функции-члены
Восстановление базового итератора из соответствующего итератора checked_array_iterator. |
Операторы
Проверка двух итераторов checked_array_iterator на равенство. |
|
Проверка двух итераторов checked_array_iterator на неравенство. |
|
Проверка на то, что итератор checked_array_iterator с левой стороны оператора меньше итератора checked_array_iterator с правой стороны. |
|
Проверка на то, что итератор checked_array_iterator с левой стороны оператора больше итератора checked_array_iterator с правой стороны. |
|
Проверка на то, что итератор checked_array_iterator с левой стороны оператора меньше или равен итератору checked_array_iterator с правой стороны. |
|
Проверка на то, что итератор checked_array_iterator с левой стороны оператора больше или равен итератора checked_array_iterator с правой стороны. |
|
Возвращение элемента, к которому обращается checked_array_iterator. |
|
Возвращение указателя на элемент, к которому обращается checked_array_iterator. |
|
Увеличение checked_array_iterator до следующего элемента. |
|
Уменьшение checked_array_iterator до предыдущего элемента. |
|
Добавление заданного смещения к итератору checked_array_iterator. |
|
Добавление смещения к итератору и возврат нового итератора checked_array_iterator, который обращается к вставленному элементу в новой позиции смещения. |
|
Уменьшение заданного смещения из checked_array_iterator. |
|
Уменьшение смещения из итератора и возврат нового итератора checked_array_iterator, который обращается к вставленному элементу в новой позиции смещения. |
|
Возврат ссылки на смещение элемента из элемента, к которому обращается checked_array_iterator, на указанное число позиций. |
Требования
Заголовок: <iterator>
Пространство имен: stdext
См. также
Ссылки
Библиотека стандартных шаблонов