Compartir a través de


checked_array_iterator (Clase)

La clase checked_array_iterator permite transformar una matriz o un puntero en un iterador comprobado. Use esta clase como contenedor (mediante la función make_checked_array_iterator) para matrices o punteros sin formato 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.

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.

Sintaxis

template <class _Iterator>
class checked_array_iterator;

Comentarios

Esta clase se define en el espacio de nombres stdext.

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

Ejemplos

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));

to

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 usan algoritmos de la biblioteca estándar de C++, considere la posibilidad de usar vector en lugar de una matriz asignada de forma dinámica. 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

Constructor Descripción
checked_array_iterator Construye un checked_array_iterator predeterminado o un checked_array_iterator a partir de un iterador subyacente.

Typedefs

Nombre de tipo Descripción
difference_type Tipo que proporciona la diferencia entre dos checked_array_iterator que hacen referencia a elementos del mismo contenedor.
pointer Tipo que proporciona un puntero a un elemento direccionado por checked_array_iterator.
referencia Tipo que proporciona una referencia a un elemento direccionado por checked_array_iterator.

Funciones miembro

Función de miembro Descripción
base Recupera el iterador subyacente de su checked_array_iterator.

Operadores

Operador Descripción
operator== Comprueba dos checked_array_iterator para ver si son iguales.
operator!= Comprueba dos checked_array_iterator para ver si son distintos.
operator< Comprueba si el checked_array_iterator a la izquierda del operador es menor que el checked_array_iterator de la derecha.
operator> Comprueba si el checked_array_iterator a la izquierda del operador es mayor que el checked_array_iterator de la derecha.
operator<= Comprueba si el checked_array_iterator a la izquierda del operador es menor o igual que el checked_array_iterator de la derecha.
operator>= Comprueba si el checked_array_iterator a la izquierda del operador es mayor o igual que el checked_array_iterator de la derecha.
operator* Devuelve el elemento que direcciona un checked_array_iterator.
operator-> 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.
operator+= 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.
operator-= 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[] Devuelve una referencia a un desplazamiento de elemento con respecto al elemento direccionado por checked_array_iterator un número especificado de posiciones.

Requisitos

Encabezado:<iterator>

Espacio de nombres: stdext

checked_array_iterator::base

Recupera el iterador subyacente de su checked_array_iterator.

_Iterator base() const;

Comentarios

Para más información, vea Iteradores activados.

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

checked_array_iterator::checked_array_iterator

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
Un puntero a la matriz.

size
Se refiere al tamaño de la matriz.

índice
(Opcional) Un elemento de la matriz para inicializar el iterador. De manera predeterminada, el iterador se inicializa en el primer elemento de la matriz.

Comentarios

Para más información, vea Iteradores activados.

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

checked_array_iterator::d ifference_type

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 tipo de diferencia checked_array_iterator es el mismo que el tipo de diferencia del iterador.

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

Para más información, vea Iteradores activados.

checked_array_iterator::operator==

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 con el que se va a comprobar la igualdad.

Comentarios

Para más información, vea Iteradores activados.

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

checked_array_iterator::operator!=

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 con el que se va a comprobar la desigualdad.

Comentarios

Para más información, vea Iteradores activados.

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

checked_array_iterator::operator<

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 con el que se va a comprobar la desigualdad.

Comentarios

Para más información, vea Iteradores activados.

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

checked_array_iterator::operator>

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 se va a comparar.

Comentarios

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

Para más información, vea Iteradores activados.

checked_array_iterator::operator<=

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 se va a comparar.

Comentarios

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

Para más información, vea Iteradores activados.

checked_array_iterator::operator>=

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 se va a comparar.

Comentarios

Para más información, vea Iteradores activados.

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

checked_array_iterator::operator*

Devuelve el elemento que direcciona un checked_array_iterator.

reference operator*() const;

Valor devuelto

El valor del elemento al que se dirige el checked_array_iterator.

Comentarios

Para más información, vea Iteradores activados.

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

checked_array_iterator::operator->

Devuelve un puntero al elemento direccionado por checked_array_iterator.

pointer operator->() const;

Valor devuelto

Un puntero al elemento al que se dirige el checked_array_iterator.

Comentarios

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

Para más información, vea Iteradores activados.

checked_array_iterator::operator++

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 checked_array_iterator preincrementado y el segundo, el operador de postincremento, devuelve una copia del checked_array_iterator incrementado.

Comentarios

Para más información, vea Iteradores activados.

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

checked_array_iterator::operator-

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 checked_array_iterator prereducido y el segundo, el operador de posdecremento, devuelve una copia del checked_array_iterator reducido.

Comentarios

Para más información, vea Iteradores activados.

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

checked_array_iterator::operator+=

Agrega un desplazamiento especificado a un checked_array_iterator.

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

Parámetros

_Off
El desplazamiento en el que se incrementa el iterador.

Valor devuelto

Una referencia al elemento al que se dirige el checked_array_iterator.

Comentarios

Para más información, vea Iteradores activados.

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

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.

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

Parámetros

_Off
El desplazamiento que se va a agregar a checked_array_iterator.

Valor devuelto

Un checked_array_iterator que se dirige al elemento de desplazamiento.

Comentarios

Para más información, vea Iteradores activados.

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

checked_array_iterator::operator-=

Disminuye un desplazamiento especificado de un checked_array_iterator.

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

Parámetros

_Off
El desplazamiento en el que se incrementa el iterador.

Valor devuelto

Una referencia al elemento al que se dirige el checked_array_iterator.

Comentarios

Para más información, vea Iteradores activados.

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

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.

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

difference_type operator-(const checked_array_iterator& right) const;

Parámetros

_Off
El desplazamiento que se restará del checked_array_iterator.

Valor devuelto

Un checked_array_iterator que se dirige al elemento de desplazamiento.

Comentarios

Para más información, vea Iteradores activados.

checked_array_iterator::operator[]

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 la dirección del checked_array_iterator.

Valor devuelto

La referencia al desplazamiento del elemento.

Comentarios

Para más información, vea Iteradores activados.

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

checked_array_iterator::p inter

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

typedef typename iterator_traits<_Iterator>::pointer pointer;

Comentarios

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

Para más información, vea Iteradores activados.

checked_array_iterator::reference

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

typedef typename iterator_traits<_Iterator>::reference reference;

Comentarios

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

Para más información, vea Iteradores activados.

Consulte también

<iterator>
Referencia de biblioteca estándar de C++