Compartir a través de


make_unchecked_array_iterator

Crea un unchecked_array_iterator que pueden usar otros algoritmos.

Nota

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>
  unchecked_array_iterator<Iter> 
    make_unchecked_array_iterator(
      Iter Ptr
);

Parámetros

  • Ptr
    Puntero a la matriz de destino.

Valor devuelto

Instancia de unchecked_array_iterator.

Comentarios

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

Esta función toma un puntero sin formato y lo encapsula en una clase que no realiza ninguna comprobación y por tanto no optimiza nada, pero también silencia las advertencias del compilador como C4996. Por tanto, es una manera dirigida de tratar las advertencias de puntero no comprobadas sin silenciarlas de forma global o incurrir en el costo de comprobación. 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_unchecked_array_iterator para especificar el destino.

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

#include <algorithm>
#include <iterator> // stdext::make_unchecked_array_iterator
#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;
    int *dest = new int[dest_size];
    vector<int> v;

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

    // COMPILER WARNING SILENCED: stdext::unchecked_array_iterator is marked as checked in debug mode
    // (it performs no checking, so an overrun will trigger undefined behavior)
    copy(v.begin(), v.end(), stdext::make_unchecked_array_iterator(dest));

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

    delete[] dest;
}

Salida

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

Vea también

Referencia

Biblioteca de plantillas estándar