checked_array_iterator — Klasa
Klasa checked_array_iterator
umożliwia przekształcenie tablicy lub wskaźnika w sprawdzony iterator. Użyj tej klasy jako otoki (przy użyciu funkcji make_checked_array_iterator ) dla nieprzetworzonych wskaźników lub tablic jako docelowej metody sprawdzania i zarządzania niezaznakowanym ostrzeżeniami wskaźnika zamiast globalnego wyciszania tych ostrzeżeń. W razie potrzeby możesz użyć niezaznaczonej wersji tej klasy, unchecked_array_iterator.
Uwaga
Ta klasa jest rozszerzeniem firmy 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.
Składnia
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 w zaznaczonej funkcji iteratora, zobacz Sprawdzono iteratory.
Przykłady
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 wartość
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;
}
/* Output:
( 0 1 2 3 4 )
( 0 1 2 3 4 )
*/
Aby uniknąć konieczności używania algorytmów biblioteki standardowej checked_array_iterator
języka C++, rozważ użycie vector
tablicy zamiast dynamicznie przydzielonej 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;
}
/* Output:
0 1 2 3 4 5 6 7 8 9
*/
Konstruktory
Konstruktor | opis |
---|---|
checked_array_iterator | Tworzy wartość domyślną checked_array_iterator lub z checked_array_iterator bazowego iteratora. |
Typedefs
Nazwa typu | opis |
---|---|
difference_type | Typ, który zapewnia różnicę między dwoma checked_array_iterator elementami w tym samym kontenerze. |
wskaźnik | Typ, który dostarcza wskaźnik do elementu adresowanego checked_array_iterator przez element . |
odniesienie | Typ, który zawiera odwołanie do elementu, do którego checked_array_iterator odnosi się element . |
Funkcje składowe
Funkcja składowa | opis |
---|---|
base | Odzyskuje źródłowy iterator z jego checked_array_iterator . |
Operatory
Operator | opis |
---|---|
operator== | Testuje dwie checked_array_iterator s pod kątem równości. |
operator!= | Testuje dwie checked_array_iterator pod kątem nierówności. |
operator< | Sprawdza, czy po checked_array_iterator lewej stronie operatora jest mniejszy niż checked_array_iterator po prawej stronie. |
operator> | Sprawdza, czy po checked_array_iterator lewej stronie operatora jest większy niż checked_array_iterator po prawej stronie. |
operator< = | Sprawdza, czy po checked_array_iterator lewej stronie operatora jest mniejsze niż lub równe checked_array_iterator po prawej stronie. |
operator> = | Sprawdza, czy wartość checked_array_iterator po lewej stronie operatora jest większa lub równa checked_array_iterator wartości po prawej stronie. |
operator* | Zwraca element adresowy checked_array_iterator . |
operator-> | Zwraca wskaźnik do elementu adresowanego checked_array_iterator przez element . |
operator++ | Zwiększa checked_array_iterator wartość do następnego elementu. |
operator-- | Dekrementuje element checked_array_iterator do poprzedniego elementu. |
operator+= | Dodaje określone przesunięcie do elementu checked_array_iterator . |
operator+ | Dodaje przesunięcie do iteratora i zwraca nowe checked_array_iterator adresowanie wstawionego elementu w nowej pozycji przesunięcia. |
operator-= | Dekrementuje określone przesunięcie z elementu checked_array_iterator . |
operator- | Dekrementuje przesunięcie z iteratora i zwraca nowe checked_array_iterator adresowanie wstawionego elementu w nowej pozycji przesunięcia. |
operator[] |
Zwraca odwołanie do przesunięcia elementu z elementu adresowanego przez checked_array_iterator określoną liczbę pozycji. |
Wymagania
Nagłówek:<iterator>
Przestrzeń nazw: stdext
checked_array_iterator::base
Odzyskuje źródłowy iterator z jego checked_array_iterator
.
_Iterator base() const;
Uwagi
Aby uzyskać więcej informacji, zobacz Sprawdzono iteratory.
Przykład
// checked_array_iterators_base.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>
int main() {
using namespace std;
int V1[10];
for (int i = 0; i < 10 ; i++)
V1[i] = i;
int* bpos;
stdext::checked_array_iterator<int*> rpos(V1, 10);
rpos++;
bpos = rpos.base ( );
cout << "The iterator underlying rpos is bpos & it points to: "
<< *bpos << "." << endl;
}
/* Output:
The iterator underlying rpos is bpos & it points to: 1.
*/
checked_array_iterator::checked_array_iterator
Tworzy wartość domyślną checked_array_iterator
lub z checked_array _iterator
bazowego iteratora.
checked_array_iterator();
checked_array_iterator(
ITerator ptr,
size_t size,
size_t index = 0);
Parametry
ptr
Wskaźnik do tablicy.
rozmiar
Rozmiar tablicy.
indeks
(Opcjonalnie) Element w tablicy, aby zainicjować iterator. Domyślnie iterator jest inicjowany do pierwszego elementu w tablicy.
Uwagi
Aby uzyskać więcej informacji, zobacz Sprawdzono iteratory.
Przykład
// 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;
}
/* Output:
0 1 2 3 4
0 1 2 3 4
3
*/
checked_array_iterator::d ifference_type
Typ, który zapewnia różnicę między dwoma checked_array_iterator
elementami w tym samym kontenerze.
typedef typename iterator_traits<_Iterator>::difference_type difference_type;
Uwagi
Typ checked_array_iterator
różnicy jest taki sam jak typ różnicy iteratora.
Zobacz checked_array_iterator::operator[] dla przykładu kodu.
Aby uzyskać więcej informacji, zobacz Sprawdzono iteratory.
checked_array_iterator::operator==
Testuje dwie checked_array_iterator
s pod kątem równości.
bool operator==(const checked_array_iterator<_Iterator>& right) const;
Parametry
Prawy
Przeciw checked_array_iterator
którym należy sprawdzić równość.
Uwagi
Aby uzyskać więcej informacji, zobacz Sprawdzono iteratory.
Przykład
// checked_array_iterators_opeq.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));
copy(a, a + 5, checked_array_iterator<int*>(b,5));
checked_array_iterator<int*> checked_output_iterator(b,5);
checked_array_iterator<int*> checked_output_iterator2(b,5);
if (checked_output_iterator2 == checked_output_iterator)
cout << "checked_array_iterators are equal" << endl;
else
cout << "checked_array_iterators are not equal" << endl;
copy (a, a + 5, checked_output_iterator);
checked_output_iterator++;
if (checked_output_iterator2 == checked_output_iterator)
cout << "checked_array_iterators are equal" << endl;
else
cout << "checked_array_iterators are not equal" << endl;
}
/* Output:
checked_array_iterators are equal
checked_array_iterators are not equal
*/
checked_array_iterator::operator!=
Testuje dwie checked_array_iterator
pod kątem nierówności.
bool operator!=(const checked_array_iterator<_Iterator>& right) const;
Parametry
Prawy
Przeciw checked_array_iterator
którym należy sprawdzić nierówność.
Uwagi
Aby uzyskać więcej informacji, zobacz Sprawdzono iteratory.
Przykład
// checked_array_iterators_opneq.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));
copy(a, a + 5, checked_array_iterator<int*>(b,5));
checked_array_iterator<int*> checked_output_iterator(b,5);
checked_array_iterator<int*> checked_output_iterator2(b,5);
if (checked_output_iterator2 != checked_output_iterator)
cout << "checked_array_iterators are not equal" << endl;
else
cout << "checked_array_iterators are equal" << endl;
copy (a, a + 5, checked_output_iterator);
checked_output_iterator++;
if (checked_output_iterator2 != checked_output_iterator)
cout << "checked_array_iterators are not equal" << endl;
else
cout << "checked_array_iterators are equal" << endl;
}
/* Output:
checked_array_iterators are equal
checked_array_iterators are not equal
*/
checked_array_iterator::operator<
Sprawdza, czy po checked_array_iterator
lewej stronie operatora jest mniejszy niż checked_array_iterator
po prawej stronie.
bool operator<(const checked_array_iterator<_Iterator>& right) const;
Parametry
Prawy
Przeciw checked_array_iterator
którym należy sprawdzić nierówność.
Uwagi
Aby uzyskać więcej informacji, zobacz Sprawdzono iteratory.
Przykład
// checked_array_iterators_oplt.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));
copy(a, a + 5, checked_array_iterator<int*>(b,5));
checked_array_iterator<int*> checked_output_iterator(b,5);
checked_array_iterator<int*> checked_output_iterator2(b,5);
if (checked_output_iterator2 < checked_output_iterator)
cout << "checked_output_iterator2 is less than checked_output_iterator" << endl;
else
cout << "checked_output_iterator2 is not less than checked_output_iterator" << endl;
copy (a, a + 5, checked_output_iterator);
checked_output_iterator++;
if (checked_output_iterator2 < checked_output_iterator)
cout << "checked_output_iterator2 is less than checked_output_iterator" << endl;
else
cout << "checked_output_iterator2 is not less than checked_output_iterator" << endl;
}
/* Output:
checked_output_iterator2 is not less than checked_output_iterator
checked_output_iterator2 is less than checked_output_iterator
*/
checked_array_iterator::operator>
Sprawdza, czy po checked_array_iterator
lewej stronie operatora jest większy niż checked_array_iterator
po prawej stronie.
bool operator>(const checked_array_iterator<_Iterator>& right) const;
Parametry
Prawy
Porównanie checked_array_iterator
.
Uwagi
Zobacz checked_array_iterator::operator<
przykładowy kod.
Aby uzyskać więcej informacji, zobacz Sprawdzono iteratory.
checked_array_iterator::operator<=
Sprawdza, czy po checked_array_iterator
lewej stronie operatora jest mniejsze niż lub równe checked_array_iterator
po prawej stronie.
bool operator<=(const checked_array_iterator<_Iterator>& right) const;
Parametry
Prawy
Porównanie checked_array_iterator
.
Uwagi
Zobacz checked_array_iterator::operator>=
przykładowy kod.
Aby uzyskać więcej informacji, zobacz Sprawdzono iteratory.
checked_array_iterator::operator>=
Sprawdza, czy wartość checked_array_iterator
po lewej stronie operatora jest większa lub równa checked_array_iterator
wartości po prawej stronie.
bool operator>=(const checked_array_iterator<_Iterator>& right) const;
Parametry
Prawy
Porównanie checked_array_iterator
.
Uwagi
Aby uzyskać więcej informacji, zobacz Sprawdzono iteratory.
Przykład
// checked_array_iterators_opgteq.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));
copy(a, a + 5, checked_array_iterator<int*>(b,5));
checked_array_iterator<int*> checked_output_iterator(b,5);
checked_array_iterator<int*> checked_output_iterator2(b,5);
if (checked_output_iterator2 >= checked_output_iterator)
cout << "checked_output_iterator2 is greater than or equal to checked_output_iterator" << endl;
else
cout << "checked_output_iterator2 is less than checked_output_iterator" << endl;
copy (a, a + 5, checked_output_iterator);
checked_output_iterator++;
if (checked_output_iterator2 >= checked_output_iterator)
cout << "checked_output_iterator2 is greater than or equal to checked_output_iterator" << endl;
else
cout << "checked_output_iterator2 is less than checked_output_iterator" << endl;
}
/* Output:
checked_output_iterator2 is greater than or equal to checked_output_iterator
checked_output_iterator2 is less than checked_output_iterator
*/
checked_array_iterator::operator*
Zwraca element adresowy checked_array_iterator
.
reference operator*() const;
Wartość zwracana
Wartość elementu adresowanego przez element checked_array_iterator
.
Uwagi
Aby uzyskać więcej informacji, zobacz Sprawdzono iteratory.
Przykład
// checked_array_iterator_pointer.cpp
// compile with: /EHsc
#include <iterator>
#include <algorithm>
#include <vector>
#include <utility>
#include <iostream>
using namespace std;
using namespace stdext;
int main() {
int a[] = {0, 1, 2, 3, 4};
int b[5];
pair<int, int> c[1];
copy(a, a + 5, checked_array_iterator<int*>(b,5));
for (int i = 0 ; i < 5 ; i++)
cout << b[i] << endl;
c[0].first = 10;
c[0].second = 20;
checked_array_iterator<int*> checked_output_iterator(b,5);
checked_array_iterator<int*>::pointer p = &(*checked_output_iterator);
checked_array_iterator<pair<int, int>*> chk_c(c, 1);
checked_array_iterator<pair<int, int>*>::pointer p_c = &(*chk_c);
cout << "b[0] = " << *p << endl;
cout << "c[0].first = " << p_c->first << endl;
}
/* Output:
0
1
2
3
4
b[0] = 0
c[0].first = 10
*/
checked_array_iterator::operator->
Zwraca wskaźnik do elementu adresowanego checked_array_iterator
przez element .
pointer operator->() const;
Wartość zwracana
Wskaźnik do elementu adresowanego checked_array_iterator
przez element .
Uwagi
Zobacz checked_array_iterator::p ointer , aby zapoznać się z przykładem kodu.
Aby uzyskać więcej informacji, zobacz Sprawdzono iteratory.
checked_array_iterator::operator++
Zwiększa checked_array_iterator
wartość do następnego elementu.
checked_array_iterator& operator++();
checked_array_iterator<_Iterator> operator++(int);
Wartość zwracana
Pierwszy operator zwraca wstępnie zwiększoną checked_array_iterator
wartość, a drugi , operator postincrement, zwraca kopię przyrostowego checked_array_iterator
elementu .
Uwagi
Aby uzyskać więcej informacji, zobacz Sprawdzono iteratory.
Przykład
// checked_array_iterators_op_plus_plus.cpp
// compile with: /EHsc
#include <vector>
#include <iostream>
int main() {
using namespace stdext;
using namespace std;
int a[] = {6, 3, 77, 199, 222};
int b[5];
copy(a, a + 5, checked_array_iterator<int*>(b,5));
checked_array_iterator<int*> checked_output_iterator(b,5);
cout << *checked_output_iterator << endl;
++checked_output_iterator;
cout << *checked_output_iterator << endl;
checked_output_iterator++;
cout << *checked_output_iterator << endl;
}
/* Output:
6
3
77
*/
checked_array_iterator::operator-
Dekrementuje element checked_array_iterator
do poprzedniego elementu.
checked_array_iterator<_Iterator>& operator--();
checked_array_iterator<_Iterator> operator--(int);
Wartość zwracana
Pierwszy operator zwraca wstępnie zadeklarowane checked_array_iterator
polecenie, a drugi operator postdecrement zwraca kopię dekrementacji checked_array_iterator
.
Uwagi
Aby uzyskać więcej informacji, zobacz Sprawdzono iteratory.
Przykład
// checked_array_iterators_op_minus_minus.cpp
// compile with: /EHsc
#include <vector>
#include <iostream>
int main() {
using namespace stdext;
using namespace std;
int a[] = {6, 3, 77, 199, 222};
int b[5];
copy(a, a + 5, checked_array_iterator<int*>(b,5));
checked_array_iterator<int*> checked_output_iterator(b,5);
cout << *checked_output_iterator << endl;
checked_output_iterator++;
cout << *checked_output_iterator << endl;
checked_output_iterator--;
cout << *checked_output_iterator << endl;
}
/* Output:
6
3
6
*/
checked_array_iterator::operator+=
Dodaje określone przesunięcie do elementu checked_array_iterator
.
checked_array_iterator<_Iterator>& operator+=(difference_type _Off);
Parametry
_Od
Przesunięcie, o które ma zwiększać iterator.
Wartość zwracana
Odwołanie do elementu, do których checked_array_iterator
odnosi się element .
Uwagi
Aby uzyskać więcej informacji, zobacz Sprawdzono iteratory.
Przykład
// checked_array_iterators_op_plus_eq.cpp
// compile with: /EHsc
#include <vector>
#include <iostream>
int main() {
using namespace stdext;
using namespace std;
int a[] = {6, 3, 77, 199, 222};
int b[5];
copy(a, a + 5, checked_array_iterator<int*>(b,5));
checked_array_iterator<int*> checked_output_iterator(b,5);
cout << *checked_output_iterator << endl;
checked_output_iterator += 3;
cout << *checked_output_iterator << endl;
}
/* Output:
6
199
*/
checked_array_iterator::operator+
Dodaje przesunięcie do iteratora i zwraca nowe checked_array_iterator
adresowanie wstawionego elementu w nowej pozycji przesunięcia.
checked_array_iterator<_Iterator> operator+(difference_type _Off) const;
Parametry
_Od
Przesunięcie, które ma zostać dodane do elementu checked_array_iterator
.
Wartość zwracana
Adresowanie checked_array_iterator
elementu przesunięcia.
Uwagi
Aby uzyskać więcej informacji, zobacz Sprawdzono iteratory.
Przykład
// checked_array_iterators_op_plus.cpp
// compile with: /EHsc
#include <vector>
#include <iostream>
int main() {
using namespace stdext;
using namespace std;
int a[] = {6, 3, 77, 199, 222};
int b[5];
copy(a, a + 5, checked_array_iterator<int*>(b,5));
checked_array_iterator<int*> checked_output_iterator(b,5);
cout << *checked_output_iterator << endl;
checked_output_iterator = checked_output_iterator + 3;
cout << *checked_output_iterator << endl;
}
/* Output:
6
199
*/
checked_array_iterator::operator-=
Dekrementuje określone przesunięcie z elementu checked_array_iterator
.
checked_array_iterator<_Iterator>& operator-=(difference_type _Off);
Parametry
_Od
Przesunięcie, o które ma zwiększać iterator.
Wartość zwracana
Odwołanie do elementu, do których checked_array_iterator
odnosi się element .
Uwagi
Aby uzyskać więcej informacji, zobacz Sprawdzono iteratory.
Przykład
// checked_array_iterators_op_minus_eq.cpp
// compile with: /EHsc
#include <vector>
#include <iostream>
int main() {
using namespace stdext;
using namespace std;
int a[] = {6, 3, 77, 199, 222};
int b[5];
copy(a, a + 5, checked_array_iterator<int*>(b,5));
checked_array_iterator<int*> checked_output_iterator(b,5);
checked_output_iterator += 3;
cout << *checked_output_iterator << endl;
checked_output_iterator -= 2;
cout << *checked_output_iterator << endl;
}
/* Output:
199
3
*/
checked_array_iterator::operator—
Dekrementuje przesunięcie z iteratora i zwraca nowe checked_array_iterator
adresowanie wstawionego elementu w nowej pozycji przesunięcia.
checked_array_iterator<_Iterator> operator-(difference_type _Off) const;
difference_type operator-(const checked_array_iterator& right) const;
Parametry
_Od
Przesunięcie, które ma zostać zdekrementowane z .checked_array_iterator
Wartość zwracana
Adresowanie checked_array_iterator
elementu przesunięcia.
Uwagi
Aby uzyskać więcej informacji, zobacz Sprawdzono iteratory.
checked_array_iterator::operator[]
Zwraca odwołanie do przesunięcia elementu z elementu adresowanego przez checked_array_iterator
określoną liczbę pozycji.
reference operator[](difference_type _Off) const;
Parametry
_Od
Przesunięcie adresu checked_array_iterator
.
Wartość zwracana
Odwołanie do przesunięcia elementu.
Uwagi
Aby uzyskać więcej informacji, zobacz Sprawdzono iteratory.
Przykład
// checked_array_iterators_op_diff.cpp
// compile with: /EHsc
#include <vector>
#include <iostream>
int main() {
using namespace std;
int V1[10];
for (int i = 0; i < 10 ; i++)
V1[i] = i;
// Declare a difference type for a parameter
stdext::checked_array_iterator<int*>::difference_type diff = 2;
stdext::checked_array_iterator<int*> VChkIter(V1, 10);
stdext::checked_array_iterator<int*>::reference refrpos = VChkIter [diff];
cout << refrpos + 1 << endl;
}
/* Output:
3
*/
checked_array_iterator::p ointer
Typ, który dostarcza wskaźnik do elementu adresowanego checked_array_iterator
przez element .
typedef typename iterator_traits<_Iterator>::pointer pointer;
Uwagi
Zobacz checked_array_iterator::operator* dla przykładu kodu.
Aby uzyskać więcej informacji, zobacz Sprawdzono iteratory.
checked_array_iterator::reference
Typ, który zawiera odwołanie do elementu, do którego checked_array_iterator
odnosi się element .
typedef typename iterator_traits<_Iterator>::reference reference;
Uwagi
Zobacz checked_array_iterator::operator[] dla przykładu kodu.
Aby uzyskać więcej informacji, zobacz Sprawdzono iteratory.