Partager via


checked_array_iterator, classe

La classe checked_array_iterator vous permet de transformer un tableau ou un pointeur en un itérateur vérifié. Utilisez cette classe comme wrapper (à l’aide de la fonction make_checked_array_iterator) pour les pointeurs ou tableaux bruts comme un moyen ciblé d’exécuter des vérifications et de gérer les avertissements de pointeur non vérifié, au lieu de désactiver globalement ces avertissements. Si nécessaire, utilisez la version non vérifiée de cette classe, unchecked_array_iterator.

Remarque

Cette classe est une extension Microsoft de la bibliothèque standard C++. Le code implémenté à l’aide de cette fonction ne peut pas être utilisé dans les environnements de build C++ standard qui ne prennent pas en charge cette extension Microsoft. Pour savoir comment écrire du code qui ne requiert pas l'utilisation de cette classe, consultez le deuxième exemple ci-dessous.

Syntaxe

template <class _Iterator>
class checked_array_iterator;

Notes

Cette classe est définie dans l’espace de noms stdext.

Pour plus d’informations et pour obtenir un exemple de code sur la fonctionnalité d’itérateur vérifié, consultez Itérateurs vérifiés.

Exemples

L'exemple suivant indique comment définir et utiliser un itérateur vérifié de tableau.

Si la destination n'est pas suffisamment grande pour contenir tous les éléments copiés, ce qui serait le cas si vous aviez modifié la ligne suivante :

copy(a, a + 5, checked_array_iterator<int*>(b, 5));

à

copy(a, a + 5, checked_array_iterator<int*>(b, 4));

Une erreur d'exécution se produira.

// 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 )
*/

Pour ne pas avoir besoin de la classe checked_array_iterator quand vous utilisez des algorithmes de bibliothèque C++ Standard, utilisez un vector au lieu d’un tableau alloué dynamiquement. L'exemple suivant illustre la procédure à suivre pour réaliser cette opération.

// 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
*/

Constructeurs

Constructeur Description
checked_array_iterator Construit un checked_array_iterator par défaut ou un checked_array_iterator à partir d'un itérateur sous-jacent.

Typedefs

Nom de type Description
difference_type Type qui fournit la différence entre deux objets checked_array_iterator se rapportant à des éléments dans le même conteneur.
pointer Type qui fournit un pointeur vers un élément traité par un checked_array_iterator.
référence Type qui fournit une référence à un élément traité par un checked_array_iterator.

Fonctions Membre

Fonction membre Description
base Récupère l'itérateur sous-jacent à partir de son checked_array_iterator.

Opérateurs

Opérateur Description
operator== Vérifie si deux objets checked_array_iterator sont égaux.
operator!= Vérifie si deux objets checked_array_iterator sont inégaux.
operator< Vérifie si le checked_array_iterator à gauche de l'opérateur est inférieur au checked_array_iterator du côté droit.
operator> Vérifie si le checked_array_iterator à gauche de l'opérateur est supérieur à l'objet checked_array_iterator du côté droit.
operator<= Vérifie si le checked_array_iterator à gauche de l'opérateur est inférieur ou égal au checked_array_iterator du côté droit.
operator>= Vérifie si le checked_array_iterator à gauche de l'opérateur est supérieur ou égal au checked_array_iterator du côté droit.
operator* Retourne l'élément traité par checked_array_iterator.
operator-> Retourne un pointeur vers l'élément traité par le checked_array_iterator.
operator++ Incrémente le checked_array_iterator à l'élément suivant.
operator-- Décrémente le checked_array_iterator à l'élément précédent.
operator+= Ajoute un décalage spécifié à un checked_array_iterator.
operator+ Ajoute un décalage à un itérateur et retourne le nouvel checked_array_iterator qui se rapporte à l'élément inséré à la nouvelle position décalée.
operator-= Décrémente un décalage spécifié d'un checked_array_iterator.
operator- Décrémente un décalage depuis un itérateur et retourne le nouveau checked_array_iterator qui traite l'élément inséré à la nouvelle position décalée.
operator[] Retourne une référence à un élément décalé d'un nombre donné de positions par rapport à l'élément auquel un checked_array_iterator se rapportait.

Spécifications

Header :<iterator>

Espace de noms : stdext

checked_array_iterator ::base

Récupère l'itérateur sous-jacent à partir de son checked_array_iterator.

_Iterator base() const;

Notes

Pour plus d'informations, consultez Checked Iterators.

Exemple

// 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

Construit un checked_array_iterator par défaut ou un checked_array _iterator à partir d'un itérateur sous-jacent.

checked_array_iterator();

checked_array_iterator(
    ITerator ptr,
    size_t size,
    size_t index = 0);

Paramètres

ptr
Pointeur vers le tableau.

size
Taille du tableau.

index
(Facultatif) Un élément du tableau, pour initialiser l’itérateur. Par défaut, l’itérateur est initialisé au niveau du premier élément du tableau.

Notes

Pour plus d'informations, consultez Checked Iterators.

Exemple

// 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

Type qui fournit la différence entre deux objets checked_array_iterator se rapportant à des éléments dans le même conteneur.

typedef typename iterator_traits<_Iterator>::difference_type difference_type;

Notes

Le type de différence entre objets checked_array_iterator est le même que le type de différence entre itérateurs.

Consultez checked_array_iterator::operator[] pour obtenir un exemple de code.

Pour plus d'informations, consultez Checked Iterators.

checked_array_iterator ::operator==

Vérifie si deux objets checked_array_iterator sont égaux.

bool operator==(const checked_array_iterator<_Iterator>& right) const;

Paramètres

right
checked_array_iterator par rapport auquel vérifier l’égalité.

Notes

Pour plus d'informations, consultez Checked Iterators.

Exemple

// 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 !=

Vérifie si deux objets checked_array_iterator sont inégaux.

bool operator!=(const checked_array_iterator<_Iterator>& right) const;

Paramètres

right
checked_array_iterator par rapport auquel vérifier l’inégalité.

Notes

Pour plus d'informations, consultez Checked Iterators.

Exemple

// 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<

Vérifie si le checked_array_iterator à gauche de l'opérateur est inférieur au checked_array_iterator du côté droit.

bool operator<(const checked_array_iterator<_Iterator>& right) const;

Paramètres

right
checked_array_iterator par rapport auquel vérifier l’inégalité.

Notes

Pour plus d'informations, consultez Checked Iterators.

Exemple

// 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>

Vérifie si le checked_array_iterator à gauche de l'opérateur est supérieur à l'objet checked_array_iterator du côté droit.

bool operator>(const checked_array_iterator<_Iterator>& right) const;

Paramètres

right
checked_array_iterator avec lequel effectuer la comparaison.

Notes

Consultez checked_array_iterator::operator< un exemple de code.

Pour plus d'informations, consultez Checked Iterators.

checked_array_iterator::operator<=

Vérifie si le checked_array_iterator à gauche de l'opérateur est inférieur ou égal au checked_array_iterator du côté droit.

bool operator<=(const checked_array_iterator<_Iterator>& right) const;

Paramètres

right
checked_array_iterator avec lequel effectuer la comparaison.

Notes

Consultez checked_array_iterator::operator>= un exemple de code.

Pour plus d'informations, consultez Checked Iterators.

checked_array_iterator::operator>=

Vérifie si le checked_array_iterator à gauche de l'opérateur est supérieur ou égal au checked_array_iterator du côté droit.

bool operator>=(const checked_array_iterator<_Iterator>& right) const;

Paramètres

right
checked_array_iterator avec lequel effectuer la comparaison.

Notes

Pour plus d'informations, consultez Checked Iterators.

Exemple

// 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*

Retourne l'élément traité par checked_array_iterator.

reference operator*() const;

Valeur de retour

Valeur de l’élément ciblé par le checked_array_iterator.

Notes

Pour plus d'informations, consultez Checked Iterators.

Exemple

// 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->

Retourne un pointeur vers l'élément traité par le checked_array_iterator.

pointer operator->() const;

Valeur de retour

Pointeur vers l’élément ciblé par le checked_array_iterator.

Notes

Consultez checked_array_iterator::pointer pour obtenir un exemple de code.

Pour plus d'informations, consultez Checked Iterators.

checked_array_iterator ::operator++

Incrémente le checked_array_iterator à l'élément suivant.

checked_array_iterator& operator++();

checked_array_iterator<_Iterator> operator++(int);

Valeur de retour

Le premier opérateur retourne le checked_array_iterator préincrémenté et le deuxième, l’opérateur de postincrémentation, retourne une copie du checked_array_iterator incrémenté.

Notes

Pour plus d'informations, consultez Checked Iterators.

Exemple

// 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--

Décrémente le checked_array_iterator à l'élément précédent.

checked_array_iterator<_Iterator>& operator--();

checked_array_iterator<_Iterator> operator--(int);

Valeur de retour

Le premier opérateur retourne le checked_array_iterator prédécrémenté et le deuxième, l’opérateur de postdécrémentation, retourne une copie du checked_array_iterator décrémenté.

Notes

Pour plus d'informations, consultez Checked Iterators.

Exemple

// 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+=

Ajoute un décalage spécifié à un checked_array_iterator.

checked_array_iterator<_Iterator>& operator+=(difference_type _Off);

Paramètres

_De
Décalage d’incrémentation de l’itérateur.

Valeur de retour

Référence à l’élément traité par le checked_array_iterator.

Notes

Pour plus d'informations, consultez Checked Iterators.

Exemple

// 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+

Ajoute un décalage à un itérateur et retourne le nouvel checked_array_iterator qui se rapporte à l'élément inséré à la nouvelle position décalée.

checked_array_iterator<_Iterator> operator+(difference_type _Off) const;

Paramètres

_De
Décalage à ajouter à checked_array_iterator.

Valeur de retour

checked_array_iterator se rapportant à l’élément de décalage.

Notes

Pour plus d'informations, consultez Checked Iterators.

Exemple

// 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-=

Décrémente un décalage spécifié d'un checked_array_iterator.

checked_array_iterator<_Iterator>& operator-=(difference_type _Off);

Paramètres

_De
Décalage d’incrémentation de l’itérateur.

Valeur de retour

Référence à l’élément traité par le checked_array_iterator.

Notes

Pour plus d'informations, consultez Checked Iterators.

Exemple

// 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-

Décrémente un décalage depuis un itérateur et retourne le nouveau checked_array_iterator qui traite l'élément inséré à la nouvelle position décalée.

checked_array_iterator<_Iterator> operator-(difference_type _Off) const;

difference_type operator-(const checked_array_iterator& right) const;

Paramètres

_De
Décalage à décrémenter du checked_array_iterator.

Valeur de retour

checked_array_iterator se rapportant à l’élément de décalage.

Notes

Pour plus d'informations, consultez Checked Iterators.

checked_array_iterator ::operator[]

Retourne une référence à un élément décalé d'un nombre donné de positions par rapport à l'élément auquel un checked_array_iterator se rapportait.

reference operator[](difference_type _Off) const;

Paramètres

_De
Décalage par rapport au checked_array_iterator traité.

Valeur de retour

Référence au décalage de l’élément.

Notes

Pour plus d'informations, consultez Checked Iterators.

Exemple

// 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

Type qui fournit un pointeur vers un élément traité par un checked_array_iterator.

typedef typename iterator_traits<_Iterator>::pointer pointer;

Notes

Consultez checked_array_iterator::operator* pour obtenir un exemple de code.

Pour plus d'informations, consultez Checked Iterators.

checked_array_iterator ::reference

Type qui fournit une référence à un élément traité par un checked_array_iterator.

typedef typename iterator_traits<_Iterator>::reference reference;

Notes

Consultez checked_array_iterator::operator[] pour obtenir un exemple de code.

Pour plus d'informations, consultez Checked Iterators.

Voir aussi

<iterator>
Informations de référence sur la bibliothèque standard C++