checked_array_iterator Class
checked_array_iteratorクラスを使用すると、チェックされた反復子にポインターまたは配列を変換します。
[!メモ]
このクラスは、Microsoft 拡張機能には、標準 C++ ライブラリです。このアルゴリズムを使用して実装するコードは移植できなくなります。このクラスの使用を必要としないコードを記述する方法を示す例については、次の 2 つ目の例を参照してください。
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
2 つの違いを提供する種類checked_array_iterators は、同じコンテナー内の要素を参照します。 |
|
処理要素へのポインターを提供する型は、 checked_array_iterator。 |
|
処理要素への参照を提供する型は、 checked_array_iterator。 |
メンバー関数
基になっている反復子からの回復は、 checked_array_iterator。 |
演算子
2 つのテストをchecked_array_iterators を等しいかどうか。 |
|
2 つのテストを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