C++ checked_array_iterator
学 STL 的时候,从来没有见过 checked_array_iterator
这个迭代器。网上查了查,发现它不属于 C++ std, 它属于 C++ stdext 中。
这是 StdExt - C++ STL Extensions 网站, 令我感到奇怪的是这个网站里面居然没有 checked_array_iterator
的解释。反而是在 msdn 上查到了它的用法。
msdn checked_array_iterator: http://msdn.microsoft.com/zh-tw/library/aa985885%28VS.90%29.aspx
checked_array_iterator( ); checked_array_iterator( ITerator ptr, size_t size, size_t index = 0 );
含义:构造一个默认的 checked_array_iterator
或者从一个基本迭代器中构造
(Constructs a default checked_array_iterator or a checked_array_iterator from an underlying iterator)
参数:
ptr : 指向数组的指针。 (A pointer to the array.) size : 数组的大小。 ( The size of the array.) index: (任意)选取一个数组中的元素,初始化迭代器。默认使用数组的第一个元素。
备注:http://msdn.microsoft.com/zh-tw/library/aa985965%28v=vs.100%29.aspx checked iterator 确保你的操作不会越界(在你的容器中)。 Checked iterators 在 release builds 和 debug builds 中都使用了。
具体看这里吧:http://msdn.microsoft.com/zh-tw/library/aa985965%28v=vs.100%29.aspx
举例:
// 下面代码来自: http://msdn.microsoft.com/zh-tw/library/aa985885%28VS.90%29.aspx // 在 code::blocks 10.05 编译不通过,说明 gcc 并不支持 stdext // 在 visual studio 2010 编译通过 // checked_array_iterators_ctor.cpp // compile with: /EHsc #include <iterator> #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)); for (int i = 0 ; i < 5 ; i++) cout << b[i] << " "; cout << endl; checked_array_iterator<int*> checked_output_iterator(b,5); copy (a, a + 5, checked_output_iterator); for (int i = 0 ; i < 5 ; i++) cout << b[i] << " "; cout << endl; checked_array_iterator<int*> checked_output_iterator2(b,5,3); cout << *checked_output_iterator2 << endl; }