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;
}
构造函数
默认的构造checked_array_iterator或checked_array_iterator从基础迭代器。 |
Typedef
一种类型提供了两个之间的差异, checked_array_iterators 引用在同一容器中的元素。 |
|
提供指向所解决的一个元素的类型checked_array_iterator。 |
|
一种类型提供了通过解决元素的引用, checked_array_iterator。 |
成员函数
恢复基础迭代器从其checked_array_iterator。 |
运算符
测试两个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的右侧。 |
|
返回的元素的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