Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
A checked_array_iterator classe permite transformar um array ou ponteiro num iterador verificado. Use esta classe como um wrapper (usando a função make_checked_array_iterator ) para ponteiros brutos ou arrays como forma direcionada de fornecer verificação e gerir avisos de ponteiros não verificados, em vez de silenciar globalmente esses avisos. Se necessário, pode usar a versão não selecionada desta classe, unchecked_array_iterator.
Note
A checked_array_iterator classe foi removida no MSVC Build Tools 14.51.
Esta classe é uma extensão da Microsoft da C++ Standard Library. O código implementado através desta função não é portátil para ambientes de compilação padrão C++ que não suportam esta extensão da Microsoft. Para um exemplo que demonstre como escrever código que não requer o uso desta classe, veja o segundo exemplo abaixo.
Syntax
template <class _Iterator>
class checked_array_iterator;
Remarks
Esta classe está definida no namespace stdext .
Para mais informações e código de exemplo sobre a funcionalidade de iteradores verificados, veja Iteradores Verificados.
Examples
O exemplo seguinte mostra como definir e usar um iterador de array verificado.
Se o destino não for suficientemente grande para conter todos os elementos a ser copiados, como aconteceria se mudasse a linha:
copy(a, a + 5, checked_array_iterator<int*>(b, 5));
to
copy(a, a + 5, checked_array_iterator<int*>(b, 4));
Ocorrerá um erro em 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;
}
/* Output:
( 0 1 2 3 4 )
( 0 1 2 3 4 )
*/
Para evitar a necessidade da checked_array_iterator classe ao usar algoritmos de Biblioteca Padrão C++, considere usar um vector array em vez de um alocado dinamicamente. 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;
}
/* Output:
0 1 2 3 4 5 6 7 8 9
*/
Constructors
| Construtor | Description |
|---|---|
| checked_array_iterator | Constrói um padrão checked_array_iterator ou um checked_array_iterator a partir de um iterador subjacente. |
Typedefs (definições de tipos)
| Nome do tipo | Description |
|---|---|
| difference_type | Um tipo que fornece a diferença entre dois checked_array_iterators referidos a elementos dentro do mesmo recipiente. |
| Ponteiro | Um tipo que fornece um ponteiro para um elemento endereçado por um checked_array_iterator. |
| reference | Um tipo que fornece uma referência a um elemento endereçado por um checked_array_iterator. |
Funções de membro
| Função de membro | Description |
|---|---|
| base | Recupera o iterador subjacente a partir do seu checked_array_iterator. |
Operadores
| Operador | Description |
|---|---|
| operador== | Testa dois checked_array_iterators para igualdade. |
| operator!= | Testa dois checked_array_iterators para desigualdade. |
| Operador< | Testa se o checked_array_iterator do lado esquerdo do operador é menor do que o checked_array_iterator do lado direito. |
| Operador> | Testa se o checked_array_iterator lado esquerdo do operador é maior do que o checked_array_iterator do lado direito. |
| operador<= | Testa se o checked_array_iterator do lado esquerdo do operador é menor ou igual ao checked_array_iterator do lado direito. |
| operador>= | Testa se o checked_array_iterator do lado esquerdo do operador é maior ou igual ao checked_array_iterator do lado direito. |
| operador* | Devolve o elemento que um checked_array_iterator endereça. |
| operador-> | Devolve um ponteiro para o elemento endereçado pelo checked_array_iterator. |
| operator++ | Incrementa o checked_array_iterator para o próximo elemento. |
| operador-- | Diminuição ao checked_array_iterator elemento anterior. |
| operador+= | Adiciona um deslocamento especificado a um checked_array_iterator. |
| operator+ | Adiciona um offset a um iterador e devolve o novo checked_array_iterator endereçamento do elemento inserido na nova posição de deslocamento. |
| operador-= | Diminui um deslocamento especificado de um checked_array_iterator. |
| operador- | Diminui um deslocamento de um iterador e devolve o novo checked_array_iterator endereçamento do elemento inserido na nova posição de deslocamento. |
operator[] |
Devolve uma referência a um elemento deslocado em relação ao elemento endereçado por a checked_array_iterator por um número especificado de posições. |
Requirements
Cabeçalho:< iterador>
Namespace: stdext
checked_array_iterator::base
Recupera o iterador subjacente a partir do seu checked_array_iterator.
_Iterator base() const;
Remarks
Para obter mais informações, consulte Iteradores verificados.
Exemplo
// 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
Constrói um padrão checked_array_iterator ou um checked_array _iterator a partir de um iterador subjacente.
checked_array_iterator();
checked_array_iterator(
ITerator ptr,
size_t size,
size_t index = 0);
Parameters
ptr
Um apontador para o array.
tamanho
O tamanho da matriz.
índice
(Opcional) Um elemento no array, para inicializar o iterador. Por defeito, o iterador é inicializado para o primeiro elemento do array.
Remarks
Para obter mais informações, consulte Iteradores verificados.
Exemplo
// 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 tipo_de_ifference_
Um tipo que fornece a diferença entre dois checked_array_iterators referidos a elementos dentro do mesmo recipiente.
typedef typename iterator_traits<_Iterator>::difference_type difference_type;
Remarks
O checked_array_iterator tipo de diferença é o mesmo que o tipo de diferença do iterador.
Veja checked_array_iterator::operator[] para um exemplo de código.
Para obter mais informações, consulte Iteradores verificados.
checked_array_iterator::operador==
Testa dois checked_array_iterators para igualdade.
bool operator==(const checked_array_iterator<_Iterator>& right) const;
Parameters
direito
A checked_array_iterator comparação com a qual verificar a igualdade.
Remarks
Para obter mais informações, consulte Iteradores verificados.
Exemplo
// 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::operador!=
Testa dois checked_array_iterators para desigualdade.
bool operator!=(const checked_array_iterator<_Iterator>& right) const;
Parameters
direito
A checked_array_iterator comparação com a qual verificar a desigualdade.
Remarks
Para obter mais informações, consulte Iteradores verificados.
Exemplo
// 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<
Testa se o checked_array_iterator do lado esquerdo do operador é menor do que o checked_array_iterator do lado direito.
bool operator<(const checked_array_iterator<_Iterator>& right) const;
Parameters
direito
A checked_array_iterator comparação com a qual verificar a desigualdade.
Remarks
Para obter mais informações, consulte Iteradores verificados.
Exemplo
// 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>
Testa se o checked_array_iterator lado esquerdo do operador é maior do que o checked_array_iterator do lado direito.
bool operator>(const checked_array_iterator<_Iterator>& right) const;
Parameters
direito
A checked_array_iterator comparar.
Remarks
Veja checked_array_iterator::operator< um exemplo de código.
Para obter mais informações, consulte Iteradores verificados.
checked_array_iterator::operator<=
Testa se o checked_array_iterator do lado esquerdo do operador é menor ou igual ao checked_array_iterator do lado direito.
bool operator<=(const checked_array_iterator<_Iterator>& right) const;
Parameters
direito
A checked_array_iterator comparar.
Remarks
Veja checked_array_iterator::operator>= um exemplo de código.
Para obter mais informações, consulte Iteradores verificados.
checked_array_iterator::operator>=
Testa se o checked_array_iterator do lado esquerdo do operador é maior ou igual ao checked_array_iterator do lado direito.
bool operator>=(const checked_array_iterator<_Iterator>& right) const;
Parameters
direito
A checked_array_iterator comparar.
Remarks
Para obter mais informações, consulte Iteradores verificados.
Exemplo
// 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::operador*
Devolve o elemento que um checked_array_iterator endereça.
reference operator*() const;
Valor de retorno
O valor do elemento endereçado pelo checked_array_iterator.
Remarks
Para obter mais informações, consulte Iteradores verificados.
Exemplo
// 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->
Devolve um ponteiro para o elemento endereçado pelo checked_array_iterator.
pointer operator->() const;
Valor de retorno
Um apontador para o elemento endereçado pelo checked_array_iterator.
Remarks
Veja checked_array_iterator::p ointer para um exemplo de código.
Para obter mais informações, consulte Iteradores verificados.
checked_array_iterator::operator++
Incrementa o checked_array_iterator para o próximo elemento.
checked_array_iterator& operator++();
checked_array_iterator<_Iterator> operator++(int);
Valor de retorno
O primeiro operador devolve o pré-incrementado checked_array_iterator e o segundo, o operador pós-incremento, devolve uma cópia do incrementado checked_array_iterator.
Remarks
Para obter mais informações, consulte Iteradores verificados.
Exemplo
// 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::operador--
Diminuição ao checked_array_iterator elemento anterior.
checked_array_iterator<_Iterator>& operator--();
checked_array_iterator<_Iterator> operator--(int);
Valor de retorno
O primeiro operador devolve o pré-decrementado checked_array_iterator e o segundo, o operador pós-decrement, devolve uma cópia do decrementado checked_array_iterator.
Remarks
Para obter mais informações, consulte Iteradores verificados.
Exemplo
// 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+=
Adiciona um deslocamento especificado a um checked_array_iterator.
checked_array_iterator<_Iterator>& operator+=(difference_type _Off);
Parameters
_Off
O deslocamento pelo qual incrementar o iterador.
Valor de retorno
Uma referência ao elemento endereçado pelo checked_array_iterator.
Remarks
Para obter mais informações, consulte Iteradores verificados.
Exemplo
// 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+
Adiciona um offset a um iterador e devolve o novo checked_array_iterator endereçamento do elemento inserido na nova posição de deslocamento.
checked_array_iterator<_Iterator> operator+(difference_type _Off) const;
Parameters
_Off
O deslocamento a ser adicionado ao checked_array_iterator.
Valor de retorno
A checked_array_iterator a endereçar o elemento de deslocamento.
Remarks
Para obter mais informações, consulte Iteradores verificados.
Exemplo
// 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-=
Diminui um deslocamento especificado de um checked_array_iterator.
checked_array_iterator<_Iterator>& operator-=(difference_type _Off);
Parameters
_Off
O deslocamento pelo qual incrementar o iterador.
Valor de retorno
Uma referência ao elemento endereçado pelo checked_array_iterator.
Remarks
Para obter mais informações, consulte Iteradores verificados.
Exemplo
// 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::operador-
Diminui um deslocamento de um iterador e devolve o novo checked_array_iterator endereçamento do elemento inserido na nova posição de deslocamento.
checked_array_iterator<_Iterator> operator-(difference_type _Off) const;
difference_type operator-(const checked_array_iterator& right) const;
Parameters
_Off
O deslocamento será decrementado a partir do checked_array_iterator.
Valor de retorno
A checked_array_iterator a endereçar o elemento de deslocamento.
Remarks
Para obter mais informações, consulte Iteradores verificados.
checked_array_iterator::operador[]
Devolve uma referência a um elemento deslocado em relação ao elemento endereçado por a checked_array_iterator por um número especificado de posições.
reference operator[](difference_type _Off) const;
Parameters
_Off
O deslocamento em relação ao checked_array_iterator endereço.
Valor de retorno
A referência ao deslocamento elemental.
Remarks
Para obter mais informações, consulte Iteradores verificados.
Exemplo
// 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 ointer
Um tipo que fornece um ponteiro para um elemento endereçado por um checked_array_iterator.
typedef typename iterator_traits<_Iterator>::pointer pointer;
Remarks
Veja checked_array_iterator::operator* para um exemplo de código.
Para obter mais informações, consulte Iteradores verificados.
checked_array_iterator::referência
Um tipo que fornece uma referência a um elemento endereçado por um checked_array_iterator.
typedef typename iterator_traits<_Iterator>::reference reference;
Remarks
Veja checked_array_iterator::operator[] para um exemplo de código.
Para obter mais informações, consulte Iteradores verificados.