Classe checked_array_iterator
A classe checked_array_iterator permite que você transforme uma matriz ou um ponteiro em um iterador verificado. Use essa classe como um wrapper (usando a função make_checked_array_iterator) para matrizes ou ponteiros brutos como uma maneira direcionada de fornecer verificação e gerenciar avisos de ponteiros não verificados, em vez de silenciar esses avisos globalmente. Se necessário, você pode usar a versão não verificada da classe, unchecked_array_iterator.
Dica
Essa classe é uma extensão da Biblioteca Padrão do C++ da Microsoft.O código implementado usando essa função não é portátil para ambientes de criação do C++ Standard que não oferecem suporte a essa extensão da Microsoft.Para ver um exemplo que demonstra como escrever código que não exige uso dessa classe, veja o segundo exemplo abaixo.
template <class _Iterator>
class checked_array_iterator;
Comentários
Essa classe é definida no namespace stdext.
Para obter mais informações e o código de exemplo sobre o recurso de iterador verificado, consulte Iteradores Verificados.
Exemplo
O exemplo a seguir mostra como definir e usar um iterador de matriz verificado.
Se o destino não for grande o suficiente para armazenar todos os elementos que estão sendo copiados, como seria se você tivesse alterado a linha:
copy(a, a + 5, checked_array_iterator<int*>(b, 5));
para
copy(a, a + 5, checked_array_iterator<int*>(b, 4));
Ocorrerá um erro de tempo de execução.
// 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;
}
Para evitar a necessidade da classe checked_array_iterator ao usar algoritmos da Biblioteca Padrão do C++, pense em usar um vector em vez de uma matriz dinamicamente alocada. O exemplo a seguir demonstra como fazer isso.
// 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;
}
Construtores
Constrói um checked_array_iterator padrão ou um checked_array_iterator de um iterador subjacente. |
Typedefs
Um tipo que fornece a diferença entre dois checked_array_iterators que se referem a elementos no mesmo contêiner. |
|
Um tipo que fornece um ponteiro para um elemento tratado por um checked_array_iterator. |
|
Um tipo que fornece uma referência a um elemento tratado por um checked_array_iterator. |
Funções membro
Recupera o iterador subjacente de seu checked_array_iterator. |
Operadores
Testa a igualdade de dois checked_array_iterators. |
|
Testa a desigualdade de dois checked_array_iterators. |
|
Testa se o checked_array_iterator à esquerda do operador é menor que o checked_array_iterator à direita. |
|
Testa se o checked_array_iterator à esquerda do operador é maior que o checked_array_iterator à direita. |
|
Testa se o checked_array_iterator à esquerda do operador é menor ou igual ao checked_array_iterator à direita. |
|
Testa se o checked_array_iterator à esquerda do operador é maior ou igual ao checked_array_iterator à direita. |
|
Retorna o elemento tratado por um checked_array_iterator. |
|
Retorna um ponteiro para o elemento tratado pelo checked_array_iterator. |
|
Incrementa o checked_array_iterator até o próximo elemento. |
|
Decrementa o checked_array_iterator para o elemento anterior. |
|
Adiciona um deslocamento especificado para um checked_array_iterator. |
|
Adiciona um deslocamento a um iterador e retorna o novo checked_array_iterator que trata o elemento inserido na nova posição de deslocamento. |
|
Decrementa um deslocamento especificado de um checked_array_iterator. |
|
Decrementa um deslocamento de um iterador e retorna o novo checked_array_iterator que trata o elemento inserido na nova posição de deslocamento. |
|
Retorna uma referência a um deslocamento do elemento tratado por um checked_array_iterator por um número especificado de posições. |
Requisitos
Cabeçalho: <iterator>
Namespace: stdext