checked_array_iterator – třída
Třída checked_array_iterator umožňuje převést pole nebo ukazatel na kontrolovaný iterátor.Použijte tuto třídu jako obálku (pomocí funkce make_checked_array_iterator) pro nezpracované ukazatele nebo pole jako cílený způsob, jak poskytnout kontrolu a spravovat nezkontrolovaná upozornění ukazatele namísto globálního umlčení těchto upozornění.V případě potřeby můžete použít nekontrolovanou verzi této třídy unchecked_array_iterator.
[!POZNÁMKA]
Tato třída je rozšířením společnosti Microsoft pro standardní knihovnu jazyka C++.Kód implementovaný pomocí této funkce není přenosný do standardního prostředí pro sestavování v jazyce C++, která toto rozšíření společnosti Microsoft nepodporují.Jak napsat kód, který nevyžaduje použití této třídy, viz druhý příklad.
template <class _Iterator>
class checked_array_iterator;
Poznámky
Tato třída je definována v oboru názvů stdext.
Další informace o funkci kontrolovaného iterátoru a ukázku kódu získáte v tématu Checked – iterátory.
Příklad
Následující příklad ukazuje, jak definovat a používat iterátor zkontrolovaného pole.
Pokud cíl není dostatečně velký pro všechny prvky, které jsou kopírovány, jako by tomu bylo při změně řádku:
copy(a, a + 5, checked_array_iterator<int*>(b, 5));
až
copy(a, a + 5, checked_array_iterator<int*>(b, 4));
Dojde k chybě modulu runtime.
// compile with: /EHsc /W4 /MTd
#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;
}
Chcete-li se vyhnout potřebě třídy checked_array_iterator při použití algoritmů standardní knihovny C++, zvažte použití vector místo dynamicky přiřazeného pole.Následující příklad demonstruje, jak to udělat.
// compile with: /EHsc /W4 /MTd
#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;
}
Konstruktory
Vytvoří výchozí checked_array_iterator nebo checked_array_iterator z podkladové iterace. |
Typedefs
Typ, který obsahuje rozdíl mezi dvěma checked_array_iterator, které odkazují na prvky v rámci stejného kontejneru. |
|
Typ, který poskytuje ukazatel na prvek řešený třídou checked_array_iterator. |
|
Typ, který poskytuje odkaz na prvek řešený třídou checked_array_iterator. |
Členské funkce
Obnoví základní iterátor z checked_array_iterator. |
Operátory
Testuje dva iterátory checked_array_iterator na rovnost. |
|
Testuje dva iterátory checked_array_iterator na nerovnost. |
|
Testuje, zda je checked_array_iterator na levé straně operátoru menší než checked_array_iterator na pravé straně. |
|
Testuje, zda je checked_array_iterator na levé straně operátoru větší než checked_array_iterator na pravé straně. |
|
Testuje, zda je checked_array_iterator na levé straně operátoru menší než nebo rovno checked_array_iterator na pravé straně. |
|
Testuje, zda je checked_array_iterator na levé straně operátoru větší než nebo rovno checked_array_iterator na pravé straně. |
|
Vrátí prvek, na který odkazuje checked_array_iterator. |
|
Vrací ukazatel na prvek odkazovaný checked_array_iterator. |
|
Zvýší checked_array_iterator na další prvek. |
|
Sníží checked_array_iterator na předchozí prvek. |
|
Přidá zadaný posun k checked_array_iterator. |
|
Přidá posun do iterátoru a vrátí nový checked_array_iterator adresující vložený prvek na nové pozici posunu. |
|
Sníží zadaný posun z checked_array_iterator. |
|
Sníží posun z iterátoru a vrátí nový checked_array_iterator adresující vložený prvek na nové pozici posunu. |
|
Vrátí odkaz na posun prvku z prvku odkazovaného checked_array_iterator o určený počet pozic. |
Požadavky
Hlavička: <iterator>
Obor názvů: stdext