checked_array_iterator (Clase)

 

Para obtener la documentación más reciente de Visual Studio 2017 RC, consulte Documentación de Visual Studio 2017 RC.

La clase checked_array_iterator permite transformar una matriz o un puntero en un iterador comprobado. Utilice esta clase como contenedor (mediante el make_checked_array_iterator función) para matrices o punteros sin procesar como una manera dirigida de comprobar y administrar advertencias de puntero no comprobadas en lugar de Silenciar de manera global estas advertencias. Si es necesario, puede usar la versión no comprobada de esta clase, unchecked_array_iterator.

System_CAPS_ICON_note.jpg Nota

Esta clase es una extensión de Microsoft de la Biblioteca estándar de C++. El código implementado mediante esta función no es portable a los entornos de compilación estándar de C++ que no admiten esta extensión de Microsoft. Para obtener un ejemplo en el que se muestra cómo escribir código que no requiere el uso de esta clase, vea el segundo ejemplo siguiente.

template <class _Iterator>  
class checked_array_iterator;

Esta clase se define en el stdext espacio de nombres.

Para obtener más información y código de ejemplo en la característica iterador comprobado, vea iteradores comprobados.

En el ejemplo siguiente se muestra cómo definir y utilizar un iterador de matrices comprobado.

Si el destino no es suficientemente grande para contener todos los elementos que se van a copiar, como ocurriría si cambió la línea:

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

hasta

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

Se producirá un error en tiempo de ejecución.

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

Para evitar la necesidad de la clase checked_array_iterator cuando se utilizan algoritmos de la Biblioteca estándar de C++, considere la posibilidad de usar vector en lugar de una matriz asignada dinámicamente. En el ejemplo siguiente se muestra cómo hacerlo:

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

Constructores

checked_array_iteratorConstruye un checked_array_iterator predeterminado o un checked_array_iterator a partir de un iterador subyacente.

Definiciones de tipo

difference_typeTipo que proporciona la diferencia entre dos checked_array_iterator que hacen referencia a elementos del mismo contenedor.
punteroTipo que proporciona un puntero a un elemento direccionado por checked_array_iterator.
referenciaTipo que proporciona una referencia a un elemento direccionado por checked_array_iterator.

Funciones miembro

baseRecupera el iterador subyacente de su checked_array_iterator.

Operadores

operador ==Comprueba dos checked_array_iterator para ver si son iguales.
operador! =Comprueba dos checked_array_iterator para ver si son distintos.
(operador)Comprueba si el checked_array_iterator a la izquierda del operador es menor que el checked_array_iterator de la derecha.
operador >Comprueba si el checked_array_iterator a la izquierda del operador es mayor que el checked_array_iterator de la derecha.
(operador)<>Comprueba si el checked_array_iterator a la izquierda del operador es menor o igual que el checked_array_iterator de la derecha.
operador > =Comprueba si el checked_array_iterator a la izquierda del operador es mayor o igual que el checked_array_iterator de la derecha.
operador *Devuelve el elemento que direcciona un checked_array_iterator.
operador->Devuelve un puntero al elemento direccionado por checked_array_iterator.
operator ++Incrementa el checked_array_iterator al elemento siguiente.
operador--Disminuye el checked_array_iterator al elemento anterior.
+= (operador)Agrega un desplazamiento especificado a un checked_array_iterator.
operator +Agrega un desplazamiento a un iterador y devuelve el nuevo checked_array_iterator que direcciona el elemento insertado en la nueva posición de desplazamiento.
operador =Disminuye un desplazamiento especificado de un checked_array_iterator.
operator-Disminuye un desplazamiento de un iterador y devuelve el nuevo checked_array_iterator que direcciona el elemento insertado en la nueva posición de desplazamiento.
[operator]](#checked_array_iterator__operator_at)Devuelve una referencia a un desplazamiento de elemento con respecto al elemento direccionado por checked_array_iterator un número especificado de posiciones.

Encabezado:<>>

Espacio de nombres: stdext

Recupera el iterador subyacente de su checked_array_iterator.

_Iterator base() const;

Comentarios

Para obtener más información, consulta Checked Iterators.

Ejemplo

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

Construye un checked_array_iterator predeterminado o un checked_array _iterator a partir de un iterador subyacente.

checked_array_iterator();

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

Parámetros

ptr
Puntero a la matriz.

size
Se refiere al tamaño de la matriz.

index
(Opcional) Un elemento de la matriz para inicializar el iterador. De forma predeterminada, se inicializa el iterador al primer elemento de la matriz.

Comentarios

Para obtener más información, consulta Checked Iterators.

Ejemplo

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

Tipo que proporciona la diferencia entre dos checked_array_iterator que hacen referencia a elementos del mismo contenedor.

typedef typename iterator_traits<_Iterator>::difference_type difference_type;

Comentarios

El checked_array_iterator tipo de diferencia es el mismo que el tipo de diferencia del iterador.

Consulte [] checked_array_iterator:: operator para obtener un ejemplo de código.

Para obtener más información, consulta Checked Iterators.

Comprueba dos checked_array_iterator para ver si son iguales.

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

Parámetros

right
El checked_array_iterator contra la que se va a comprobar la igualdad.

Comentarios

Para obtener más información, consulta Checked Iterators.

Ejemplo

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

Comprueba dos checked_array_iterator para ver si son distintos.

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

Parámetros

right
El checked_array_iterator contra el que se comprueba la desigualdad.

Comentarios

Para obtener más información, consulta Checked Iterators.

Ejemplo

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

Comprueba si el checked_array_iterator a la izquierda del operador es menor que el checked_array_iterator de la derecha.

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

Parámetros

right
El checked_array_iterator contra el que se comprueba la desigualdad.

Comentarios

Para obtener más información, consulta Checked Iterators.

Ejemplo

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

Comprueba si el checked_array_iterator a la izquierda del operador es mayor que el checked_array_iterator de la derecha.

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

Parámetros

right
El checked_array_iterator con el que comparar.

Comentarios

Consulte checked_array_iterator:: operator< para obtener un ejemplo de código.

Para obtener más información, consulta Checked Iterators.

Comprueba si el checked_array_iterator a la izquierda del operador es menor o igual que el checked_array_iterator de la derecha.

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

Parámetros

right
El checked_array_iterator con el que comparar.

Comentarios

Consulte checked_array_iterator:: operator> = para obtener un ejemplo de código.

Para obtener más información, consulta Checked Iterators.

Comprueba si el checked_array_iterator a la izquierda del operador es mayor o igual que el checked_array_iterator de la derecha.

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

Parámetros

right
El checked_array_iterator con el que comparar.

Comentarios

Para obtener más información, consulta Checked Iterators.

Ejemplo

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

Devuelve el elemento que direcciona un checked_array_iterator.

reference operator*() const;

Valor devuelto

El valor del elemento direccionado por el checked_array_iterator.

Comentarios

Para obtener más información, consulta Checked Iterators.

Ejemplo

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

Devuelve un puntero al elemento direccionado por checked_array_iterator.

pointer operator->() const;

Valor devuelto

Un puntero al elemento direccionado por el checked_array_iterator.

Comentarios

Consulte checked_array_iterator:: pointer para obtener un ejemplo de código.

Para obtener más información, consulta Checked Iterators.

Incrementa el checked_array_iterator al elemento siguiente.

checked_array_iterator& operator++();

checked_array_iterator<_Iterator> operator++(int);

Valor devuelto

El primer operador devuelve el preincremented checked_array_iterator y el segundo, el operador de incremento, devuelve una copia de la incrementado checked_array_iterator.

Comentarios

Para obtener más información, consulta Checked Iterators.

Ejemplo

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

Disminuye el checked_array_iterator al elemento anterior.

checked_array_iterator<_Iterator>& operator--();

checked_array_iterator<_Iterator> operator--(int);

Valor devuelto

El primer operador devuelve el predecremented checked_array_iterator y el segundo, el operador de decremento de postfijo, devuelve una copia de la disminuye checked_array_iterator.

Comentarios

Para obtener más información, consulta Checked Iterators.

Ejemplo

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

Agrega un desplazamiento especificado a un checked_array_iterator.

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

Parámetros

_Off
Desplazamiento que se incrementa el iterador.

Valor devuelto

Una referencia al elemento direccionado por el checked_array_iterator.

Comentarios

Para obtener más información, consulta Checked Iterators.

Ejemplo

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

Agrega un desplazamiento a un iterador y devuelve el nuevo checked_array_iterator que direcciona el elemento insertado en la nueva posición de desplazamiento.

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

Parámetros

_Off
El desplazamiento que se agregarán a la checked_array_iterator.

Valor devuelto

Un checked_array_iterator direcciona el elemento de desplazamiento.

Comentarios

Para obtener más información, consulta Checked Iterators.

Ejemplo

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

Disminuye un desplazamiento especificado de un checked_array_iterator.

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

Parámetros

_Off
Desplazamiento que se incrementa el iterador.

Valor devuelto

Una referencia al elemento direccionado por el checked_array_iterator.

Comentarios

Para obtener más información, consulta Checked Iterators.

Ejemplo

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

Disminuye un desplazamiento de un iterador y devuelve el nuevo checked_array_iterator que direcciona el elemento insertado en la nueva posición de desplazamiento.

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

difference_type operator-(const checked_array_iterator& right) const;

Parámetros

_Off
El desplazamiento se descuenta bien de la checked_array_iterator.

Valor devuelto

Un checked_array_iterator direcciona el elemento de desplazamiento.

Comentarios

Consulte checked_array_iterator:: operator - para obtener un ejemplo de código.

Para obtener más información, consulta Checked Iterators.

Devuelve una referencia a un desplazamiento de elemento con respecto al elemento direccionado por checked_array_iterator un número especificado de posiciones.

reference operator[](difference_type _Off) const;

Parámetros

_Off
El desplazamiento desde el checked_array_iterator dirección.

Valor devuelto

La referencia al desplazamiento del elemento.

Comentarios

Para obtener más información, consulta Checked Iterators.

Ejemplo

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

Tipo que proporciona un puntero a un elemento direccionado por checked_array_iterator.

typedef typename iterator_traits<_Iterator>::pointer pointer;

Comentarios

Consulte checked_array_iterator:: operator * para obtener un ejemplo de código.

Para obtener más información, consulta Checked Iterators.

Tipo que proporciona una referencia a un elemento direccionado por checked_array_iterator.

typedef typename iterator_traits<_Iterator>::reference reference;

Comentarios

Consulte [] checked_array_iterator:: operator para obtener un ejemplo de código.

Para obtener más información, consulta Checked Iterators.

<>>
Biblioteca de plantillas estándar

Mostrar: