C++ checkedarrayiterator

学 STL 的时候,从来没有见过 checked_array_iterator 这个迭代器。网上查了查,发现它不属于 C++ std, 它属于 C++ stdext 中。

这是 StdExt - C++ STL Extensions 网站,令我感到奇怪的是这个网站里面居然没有 checked_array_iterator 的解释。反而是在 msdn 上查到了它的用法。

msdn checkedarrayiterator: http://msdn.microsoft.com/zh-tw/library/aa985885(VS.90).aspx

checked_array_iterator( );
checked_array_iterator(
ITerator ptr,
size_t size,
size_t index = 0
);

含义:构造一个默认的 checkedarrayiterator 或者从一个 基本迭代器 中构造 .(Constructs a default checkedarrayiterator or a checkedarrayiterator 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(v=vs.100).aspx] checked iterator 确保你的操作不会越界(在你的容器中)。Checked iterators 在 release builds 和 debug builds 中都使用了。

具体看这里吧:http://msdn.microsoft.com/zh-tw/library/aa985965(v=vs.100).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;
}

Date: 2012-03-16 11:36:18

Author: JerryZhang