Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Met de checked_array_iterator klasse kunt u een matrix of aanwijzer omzetten in een gecontroleerde iterator. Gebruik deze klasse als een wrapper (met behulp van de functie make_checked_array_iterator ) voor onbewerkte aanwijzers of matrices als een gerichte manier om controles te bieden en niet-gecontroleerd aanwijzerwaarschuwingen te beheren in plaats van deze waarschuwingen globaal te silenceren. Indien nodig kunt u de niet-gecontroleerd versie van deze klasse gebruiken , unchecked_array_iterator.
Note
De checked_array_iterator klasse is verwijderd in MSVC Build Tools 14.51.
Deze klasse is een Microsoft uitbreiding van de C++-standaardbibliotheek. Code die met deze functie wordt geïmplementeerd, is niet overdraagbaar naar C++ Standard-buildomgevingen die deze Microsoft-extensie niet ondersteunen. Zie het tweede voorbeeld hieronder voor een voorbeeld waarin wordt gedemonstreerd hoe u code schrijft waarvoor geen gebruik van deze klasse is vereist.
Syntax
template <class _Iterator>
class checked_array_iterator;
Remarks
Deze klasse wordt gedefinieerd in de stdext-naamruimte .
Zie Controle-iterators voor meer informatie en voorbeeldcode voor de ingeschakelde iteratorfunctie.
Examples
In het volgende voorbeeld ziet u hoe u een gecontroleerde matrix-iterator definieert en gebruikt.
Als de bestemming niet groot genoeg is om alle elementen te bewaren die worden gekopieerd, zoals het geval is als u de regel hebt gewijzigd:
copy(a, a + 5, checked_array_iterator<int*>(b, 5));
naar / te
copy(a, a + 5, checked_array_iterator<int*>(b, 4));
Er treedt een runtimefout op.
// 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 )
*/
Om te voorkomen dat de checked_array_iterator klasse nodig is bij het gebruik van C++ Standard Library-algoritmen, kunt u overwegen een vector in plaats van een dynamisch toegewezen matrix te gebruiken. In het volgende voorbeeld ziet u hoe u dit doet.
// 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
| Constructeur | Description |
|---|---|
| checked_array_iterator | Hiermee wordt een standaard checked_array_iterator of een checked_array_iterator van een onderliggende iterator samengesteld. |
Typedefs
| Typenaam | Description |
|---|---|
| difference_type | Een type dat het verschil aanbiedt tussen twee checked_array_iteratorverwijzingen naar elementen in dezelfde container. |
| Aanwijzer | Een type dat een aanwijzer biedt naar een element dat wordt geadresseerd door een checked_array_iterator. |
| reference | Een type dat een verwijzing biedt naar een element dat door een checked_array_iterator. |
Functies voor leden
| Lid, functie | Description |
|---|---|
| base | Herstelt de onderliggende iterator van de bijbehorende checked_array_iterator. |
Operatoren
| Operator | Description |
|---|---|
| operator== | Test twee checked_array_iterators voor gelijkheid. |
| operator!= | Test twee checked_array_iterators op ongelijkheid. |
| operator< | Test of de checked_array_iterator linkerkant van de operator kleiner is dan de checked_array_iterator rechterzijde. |
| operator> | Test of de checked_array_iterator linkerkant van de operator groter is dan aan de checked_array_iterator rechterkant. |
| operator<= | Test of de checked_array_iterator linkerkant van de operator kleiner is dan of gelijk is aan de checked_array_iterator rechterzijde. |
| operator>= | Test of de checked_array_iterator linkerkant van de operator groter is dan of gelijk is aan de checked_array_iterator rechterkant. |
| operator* | Retourneert het element dat een checked_array_iterator adres heeft. |
| operator-> | Retourneert een aanwijzer naar het element dat is geadresseerd door de checked_array_iterator. |
| operator++ | Hiermee wordt het checked_array_iterator naar het volgende element verhoogd. |
| Operator-- | Hiermee wordt het checked_array_iterator vorige element afschroeven. |
| operator+= | Hiermee voegt u een opgegeven offset toe aan een checked_array_iterator. |
| operator+ | Voegt een offset toe aan een iterator en retourneert de nieuwe checked_array_iterator adressering van het ingevoegde element op de nieuwe offsetpositie. |
| operator-= | Een opgegeven verschuiving van een checked_array_iterator. |
| operator- | Hiermee wordt een verschuiving van een iterator afgetrokken en wordt de nieuwe checked_array_iterator adressering van het ingevoegde element op de nieuwe verschuivingspositie geretourneerd. |
operator[] |
Retourneert een verwijzing naar een elementverschil van het element dat wordt geadresseerd door een door een checked_array_iterator opgegeven aantal posities. |
Requirements
Koptekst:<iterator>
Naamruimte: stdext
checked_array_iterator::base
Herstelt de onderliggende iterator van de bijbehorende checked_array_iterator.
_Iterator base() const;
Remarks
Zie Gecontroleerde iterators voor meer informatie.
Voorbeeld
// 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
Hiermee wordt een standaard checked_array_iterator of een checked_array _iterator van een onderliggende iterator samengesteld.
checked_array_iterator();
checked_array_iterator(
ITerator ptr,
size_t size,
size_t index = 0);
Parameters
ptr
Een aanwijzer naar de matrix.
grootte
De grootte van de matrix.
index
(Optioneel) Een element in de matrix om de iterator te initialiseren. Standaard wordt de iterator geïnitialiseerd naar het eerste element in de matrix.
Remarks
Zie Gecontroleerde iterators voor meer informatie.
Voorbeeld
// 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 deductietype
Een type dat het verschil aanbiedt tussen twee checked_array_iteratorverwijzingen naar elementen in dezelfde container.
typedef typename iterator_traits<_Iterator>::difference_type difference_type;
Remarks
Het checked_array_iterator verschiltype is hetzelfde als het iterator-verschiltype.
Zie checked_array_iterator::operator[] voor een codevoorbeeld.
Zie Gecontroleerde iterators voor meer informatie.
checked_array_iterator::operator==
Test twee checked_array_iterators voor gelijkheid.
bool operator==(const checked_array_iterator<_Iterator>& right) const;
Parameters
rechts
De checked_array_iterator stelling waarmee moet worden gecontroleerd op gelijkheid.
Remarks
Zie Gecontroleerde iterators voor meer informatie.
Voorbeeld
// 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!=
Test twee checked_array_iterators op ongelijkheid.
bool operator!=(const checked_array_iterator<_Iterator>& right) const;
Parameters
rechts
Het checked_array_iterator waaruit moet worden gecontroleerd op ongelijkheid.
Remarks
Zie Gecontroleerde iterators voor meer informatie.
Voorbeeld
// 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<
Test of de checked_array_iterator linkerkant van de operator kleiner is dan de checked_array_iterator rechterzijde.
bool operator<(const checked_array_iterator<_Iterator>& right) const;
Parameters
rechts
Het checked_array_iterator waaruit moet worden gecontroleerd op ongelijkheid.
Remarks
Zie Gecontroleerde iterators voor meer informatie.
Voorbeeld
// 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>
Test of de checked_array_iterator linkerkant van de operator groter is dan aan de checked_array_iterator rechterkant.
bool operator>(const checked_array_iterator<_Iterator>& right) const;
Parameters
rechts
De checked_array_iterator te vergelijken met.
Remarks
Zie checked_array_iterator::operator< voor een codevoorbeeld.
Zie Gecontroleerde iterators voor meer informatie.
checked_array_iterator::operator<=
Test of de checked_array_iterator linkerkant van de operator kleiner is dan of gelijk is aan de checked_array_iterator rechterzijde.
bool operator<=(const checked_array_iterator<_Iterator>& right) const;
Parameters
rechts
De checked_array_iterator te vergelijken met.
Remarks
Zie checked_array_iterator::operator>= voor een codevoorbeeld.
Zie Gecontroleerde iterators voor meer informatie.
checked_array_iterator::operator>=
Test of de checked_array_iterator linkerkant van de operator groter is dan of gelijk is aan de checked_array_iterator rechterkant.
bool operator>=(const checked_array_iterator<_Iterator>& right) const;
Parameters
rechts
De checked_array_iterator te vergelijken met.
Remarks
Zie Gecontroleerde iterators voor meer informatie.
Voorbeeld
// 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*
Retourneert het element dat een checked_array_iterator adres heeft.
reference operator*() const;
Retourwaarde
De waarde van het element dat door de checked_array_iterator.
Remarks
Zie Gecontroleerde iterators voor meer informatie.
Voorbeeld
// 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->
Retourneert een aanwijzer naar het element dat is geadresseerd door de checked_array_iterator.
pointer operator->() const;
Retourwaarde
Een aanwijzer naar het element dat door de checked_array_iterator.
Remarks
Zie checked_array_iterator::p ointer voor een codevoorbeeld.
Zie Gecontroleerde iterators voor meer informatie.
checked_array_iterator::operator++
Hiermee wordt het checked_array_iterator naar het volgende element verhoogd.
checked_array_iterator& operator++();
checked_array_iterator<_Iterator> operator++(int);
Retourwaarde
De eerste operator retourneert de vooraf gemaakte checked_array_iterator en de tweede, de operator voor postincrement, retourneert een kopie van de incrementele checked_array_iteratorwaarde.
Remarks
Zie Gecontroleerde iterators voor meer informatie.
Voorbeeld
// 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--
Hiermee wordt het checked_array_iterator vorige element afschroeven.
checked_array_iterator<_Iterator>& operator--();
checked_array_iterator<_Iterator> operator--(int);
Retourwaarde
De eerste operator retourneert de vooraf gedefinieerde checked_array_iterator en de tweede, de operator voor nadecrement, retourneert een kopie van de afgebroken checked_array_iterator.
Remarks
Zie Gecontroleerde iterators voor meer informatie.
Voorbeeld
// 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+=
Hiermee voegt u een opgegeven offset toe aan een checked_array_iterator.
checked_array_iterator<_Iterator>& operator+=(difference_type _Off);
Parameters
_Off
De offset waarmee de iterator moet worden verhoogd.
Retourwaarde
Een verwijzing naar het element dat door de checked_array_iterator.
Remarks
Zie Gecontroleerde iterators voor meer informatie.
Voorbeeld
// 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+
Voegt een offset toe aan een iterator en retourneert de nieuwe checked_array_iterator adressering van het ingevoegde element op de nieuwe offsetpositie.
checked_array_iterator<_Iterator> operator+(difference_type _Off) const;
Parameters
_Off
De offset die moet worden toegevoegd aan de checked_array_iterator.
Retourwaarde
Een checked_array_iterator adressering van het offset-element.
Remarks
Zie Gecontroleerde iterators voor meer informatie.
Voorbeeld
// 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-=
Een opgegeven verschuiving van een checked_array_iterator.
checked_array_iterator<_Iterator>& operator-=(difference_type _Off);
Parameters
_Off
De offset waarmee de iterator moet worden verhoogd.
Retourwaarde
Een verwijzing naar het element dat door de checked_array_iterator.
Remarks
Zie Gecontroleerde iterators voor meer informatie.
Voorbeeld
// 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-
Hiermee wordt een verschuiving van een iterator afgetrokken en wordt de nieuwe checked_array_iterator adressering van het ingevoegde element op de nieuwe verschuivingspositie geretourneerd.
checked_array_iterator<_Iterator> operator-(difference_type _Off) const;
difference_type operator-(const checked_array_iterator& right) const;
Parameters
_Off
De verschuiving die moet worden afgebroken van de checked_array_iterator.
Retourwaarde
Een checked_array_iterator adressering van het offset-element.
Remarks
Zie Gecontroleerde iterators voor meer informatie.
checked_array_iterator::operator[]
Retourneert een verwijzing naar een elementverschil van het element dat wordt geadresseerd door een door een checked_array_iterator opgegeven aantal posities.
reference operator[](difference_type _Off) const;
Parameters
_Off
De verschuiving van het checked_array_iterator adres.
Retourwaarde
De verwijzing naar de elementverschil.
Remarks
Zie Gecontroleerde iterators voor meer informatie.
Voorbeeld
// 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
Een type dat een aanwijzer biedt naar een element dat wordt geadresseerd door een checked_array_iterator.
typedef typename iterator_traits<_Iterator>::pointer pointer;
Remarks
Zie checked_array_iterator::operator* voor een codevoorbeeld.
Zie Gecontroleerde iterators voor meer informatie.
checked_array_iterator::reference
Een type dat een verwijzing biedt naar een element dat door een checked_array_iterator.
typedef typename iterator_traits<_Iterator>::reference reference;
Remarks
Zie checked_array_iterator::operator[] voor een codevoorbeeld.
Zie Gecontroleerde iterators voor meer informatie.
Zie ook
<iterator>
Naslaginformatie over de C++ standaard bibliotheek