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;
}

First created: 2012-03-16 11:36:18
Last updated: 2022-12-11 Sun 12:49
Power by Emacs 27.1 (Org mode 9.4.4)