Para ver el artículo en inglés, active la casilla Inglés. También puede ver el texto en inglés en una ventana emergente si pasa el puntero del mouse por el texto.
Traducción
Inglés

make_checked_array_iterator

 

Crea un checked_array_iterator que pueden usar otros algoritmos.

System_CAPS_noteNota

Esta función 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.

template <class Iter>
  checked_array_iterator<Iter> 
    make_checked_array_iterator(
      Iter Ptr,
      size_t Size,
      size_t Index = 0
);

Ptr

Puntero a la matriz de destino.

Size

Tamaño de la matriz de destino.

Index

Índice opcional en la matriz.

Instancia de checked_array_iterator.

La función make_checked_array_iterator se define en el espacio de nombres stdext.

Esta función toma un puntero sin formato (que normalmente causaría preocupación acerca de la saturación de los límites) y lo contiene en una clase checked_array_iterator que hace la comprobación. Debido a que esa clase se marca como activada, la STL no advierte sobre ella. Para obtener más información y ejemplos de código, vea Iteradores activados.

Ejemplo

En el ejemplo siguiente, se crea un vector y se rellena con 10 elementos. El contenido del vector se copia en una matriz utilizando el algoritmo de copia y, a continuación, se usa make_checked_array_iterator para especificar el destino. Esto va seguido de una infracción intencionada de la comprobación de límites de forma que se desencadena un error de aserción de depuración.

// make_checked_array_iterator.cpp
// compile with: /EHsc /W4 /MTd

#include <algorithm>
#include <iterator> // stdext::make_checked_array_iterator
#include <memory> // std::make_unique
#include <iostream>
#include <vector>
#include <string>

using namespace std;

template <typename C> void print(const string& s, const C& c) {
    cout << s;

    for (const auto& e : c) {
        cout << e << " ";
    }

    cout << endl;
}

int main()
{
    const size_t dest_size = 10;
    // Old-school but not exception safe, favor make_unique<int[]>
    // int* dest = new int[dest_size];
    unique_ptr<int[]> updest = make_unique<int[]>(dest_size);
    int* dest = updest.get(); // get a raw pointer for the demo

    vector<int> v;

    for (int i = 0; i < dest_size; ++i) {
        v.push_back(i);
    }
    print("vector v: ", v);

    copy(v.begin(), v.end(), stdext::make_checked_array_iterator(dest, dest_size));

    cout << "int array dest: ";
    for (int i = 0; i < dest_size; ++i) {
        cout << dest[i] << " ";
    }
    cout << endl;

    // Add another element to the vector to force an overrun.
    v.push_back(10);
    // The next line causes a debug assertion when it executes.
    copy(v.begin(), v.end(), stdext::make_checked_array_iterator(dest, dest_size));
}

vector v: 0 1 2 3 4 5 6 7 8 9
int array dest: 0 1 2 3 4 5 6 7 8 9

Requisitos

Encabezado: <iterator>

Espacio de nombres: stdext

Mostrar: