checked_array_iterator Class

checked_array_iterator类使您可以将一个数组或指针转换为已选中的迭代器。

备注

此类是标准 C++ 库的 Microsoft 扩展。使用此算法实现的代码将可移植。有关说明如何编写代码,不需要使用此类的示例,请参阅下面的第二个示例。

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 命名空间。

已检查迭代器功能的详细信息,请参阅经过检查的迭代器

示例

下面的示例演示如何定义和使用已检查的数组迭代器。

如果目标不是足够大以容纳所有被复制的元素,如将是这种情况如果您更改了行:

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(zh-cn,VS.110).gif构造函数

checked_array_iterator

默认的构造checked_array_iteratorchecked_array_iterator从基础迭代器。

Aa985928.collapse_all(zh-cn,VS.110).gifTypedef

difference_type

一种类型提供了两个之间的差异, checked_array_iterators 引用在同一容器中的元素。

pointer

提供指向所解决的一个元素的类型checked_array_iterator

引用

一种类型提供了通过解决元素的引用, checked_array_iterator

Aa985928.collapse_all(zh-cn,VS.110).gif成员函数

base

恢复基础迭代器从其checked_array_iterator

Aa985928.collapse_all(zh-cn,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 成员