checked_array_iterator Class

checked_array_iterator類別可讓您將陣列或指標轉換為已核取的 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 命名空間。

如需有關已檢查的 iterator 功能的詳細資訊,請參閱檢查過的 Iterator

範例

下列範例會示範如何定義和使用核取的陣列 iterator。

如果目的地並不大小足以容納要複製的所有項目,例如為大小寫如果您已變更的線條:

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

Aa985928.collapse_all(zh-tw,VS.110).gif建構函式

checked_array_iterator

預設值會建構checked_array_iteratorchecked_array_iterator從基礎的 iterator。

Aa985928.collapse_all(zh-tw,VS.110).gifTypedef

difference_type

提供兩個不同的型別checked_array_iterators 指的同一個容器內的項目。

pointer

提供型別,變數的指標所修正的項目, checked_array_iterator

參考

提供所修正的項目參考的型別checked_array_iterator

Aa985928.collapse_all(zh-tw,VS.110).gif成員函式

base

復原從基礎的 iterator 其checked_array_iterator

Aa985928.collapse_all(zh-tw,VS.110).gif運算子

運算子 = =

測試兩個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的右邊顯示。

operator*

傳回的項目checked_array_iterator位址。

operator->

傳回的指標所修正的項目checked_array_iterator

operator++

每次增加checked_array_iterator下一個項目。

運算子-

遞減checked_array_iterator至前一個項目。

運算子 + =

新增到指定的位移checked_array_iterator

運算子 +

會將位移加入至 iterator,並傳回新的checked_array_iterator位址設定新的位移位置處插入的項目。

運算子 =

遞減從指定的位移checked_array_iterator

運算子-

表示該工期為從 iterator 位移的遞減,並傳回新的checked_array_iterator位址設定新的位移位置處插入的項目。

operator[]

傳回的參考項目位移所修正的項目從checked_array_iterator的幾個特定位置。

需求

標頭: <iterator>

Namespace: stdext

請參閱

參考

標準樣板程式庫

其他資源

<iterator> 成員

checked_array_iterator 成員