checked_array_iterator — Klasa
Klasa checked_array_iterator umożliwia przekształcenie tablicy lub wskaźnika w sprawdzony iterator.Używaj tej klasy jako otoki (przy użyciu funkcji make_checked_array_iterator) dla surowych wskaźników lub tablic jako ukierunkowany sposób zapewnienia sprawdzania i zarządzania ostrzeżeniami o niesprawdzonych iteratorach zamiast globalnego wyciszania tych ostrzeżeń.Jeśli to konieczne, można użyć niesprawdzonej wersji tej klasy, unchecked_array_iterator.
[!UWAGA]
Ta klasa jest rozszerzeniem Microsoft standardowej biblioteki C++.Kod zaimplementowany przy użyciu tej funkcji nie jest przenośny do standardowych środowisk kompilacji C++, które nie obsługują tego rozszerzenia Microsoft.Aby uzyskać przykład pokazujący sposób pisania kodu, który nie wymaga użycia tej klasy, zobacz drugi przykład poniżej.
template <class _Iterator>
class checked_array_iterator;
Uwagi
Ta klasa jest zdefiniowana w przestrzeni nazw stdext.
Aby uzyskać więcej informacji i przykładowy kod na temat funkcji sprawdzonego iteratora, zobacz Zaznaczone iteratory.
Przykład
Poniższy przykład pokazuje, jak zdefiniować i zastosować sprawdzony iterator tablicy.
Jeśli miejsce docelowe nie jest wystarczająco duże, aby pomieścić wszystkie kopiowane elementy, tak jak byłoby w przypadku zmiany wiersza:
copy(a, a + 5, checked_array_iterator<int*>(b, 5));
na
copy(a, a + 5, checked_array_iterator<int*>(b, 4));
Wystąpi błąd w czasie wykonywania.
// 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;
}
Aby uniknąć konieczności zastosowania klasy checked_array_iterator przy użyciu algorytmów standardowej biblioteki C++, rozważ stosowanie vector zamiast dynamicznie przydzielanej tablicy.Poniższy przykład demonstruje, jak to zrobić.
// 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
Tworzy domyślny checked_array_iterator lub checked_array_iterator z iteratora podstawowego. |
Typedefs
Typ, który zawiera różnicę między dwoma checked_array_iterator odwołującymi się do elementów w obrębie tego samego kontenera. |
|
Typ, który zawiera wskaźnik do elementu, do którego odnosi się checked_array_iterator. |
|
Typ, który zawiera odwołanie do elementu, do którego odnosi się checked_array_iterator. |
Funkcje elementów członkowskich
Odzyskuje podstawowy iterator z checked_array_iterator. |
Operatory
Testuje dwa checked_array_iterator pod kątem równości. |
|
Testuje dwa checked_array_iterator pod kątem nierówności. |
|
Testuje, czy checked_array_iterator po lewej stronie operatora jest mniejszy od checked_array_iterator po prawej stronie. |
|
Testuje, czy checked_array_iterator po lewej stronie operatora jest większy od checked_array_iterator po prawej stronie. |
|
Testuje, czy checked_array_iterator po lewej stronie operatora jest mniejszy od lub równy checked_array_iterator po prawej stronie. |
|
Testuje, czy checked_array_iterator po lewej stronie operatora jest większy od lub równy checked_array_iterator po prawej stronie. |
|
Zwraca element, do którego odnosi się checked_array_iterator. |
|
Zwraca wskaźnik do elementu, do którego odnosi się checked_array_iterator. |
|
Inkrementuje checked_array_iterator do następnego elementu. |
|
Dekrementuje checked_array_iterator do poprzedniego elementu. |
|
Dodaje określone przesunięcie do checked_array_iterator. |
|
Dodaje przesunięcie do iteratora i zwraca nowy checked_array_iterator odnoszący się do wstawionego elementu w nowym położeniu przesunięcia. |
|
Dekrementuje określone przesunięcie od checked_array_iterator. |
|
Dekrementuje przesunięcie od iteratora i zwraca nowy checked_array_iterator odnoszący się do wstawionego elementu w nowym położeniu przesunięcia. |
|
Zwraca odwołanie do przesunięcia elementu z elementu, do którego odnosi się checked_array_iterator, o określoną liczbę pozycji. |
Wymagania
Nagłówek: <iterator>
Przestrzeń nazw: stdext
Zobacz też
Informacje
Standardowa biblioteka szablonów