Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Med checked_array_iterator klassen kan du omvandla en matris eller pekare till en markerad iterator. Använd den här klassen som omslutning (med funktionen make_checked_array_iterator ) för råpekare eller matriser som ett målsätt för att tillhandahålla kontroll och hantera omarkerade pekarvarningar i stället för att globalt tysta dessa varningar. Om det behövs kan du använda den okontrollerade versionen av den här klassen , unchecked_array_iterator.
Note
Klassen checked_array_iterator togs bort i MSVC Build Tools 14.51.
Den här klassen är ett Microsoft tillägg för C++-standardbiblioteket. Kod som implementeras med den här funktionen är inte portabel för C++ Standard-byggmiljöer som inte stöder det här Microsoft tillägget. Ett exempel som visar hur du skriver kod som inte kräver användning av den här klassen finns i det andra exemplet nedan.
Syntax
template <class _Iterator>
class checked_array_iterator;
Remarks
Den här klassen definieras i stdext-namnområdet .
Mer information och exempelkod för den markerade iteratorfunktionen finns i Kontrollerade iteratorer.
Examples
Följande exempel visar hur du definierar och använder en markerad matris-iterator.
Om målet inte är tillräckligt stort för att innehålla alla element som kopieras, till exempel om du har ändrat raden:
copy(a, a + 5, checked_array_iterator<int*>(b, 5));
till
copy(a, a + 5, checked_array_iterator<int*>(b, 4));
Ett körningsfel inträffar.
// 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 du vill undvika behovet av klassen när du använder C++ Standard Library-algoritmer bör du överväga att använda en vector i stället för checked_array_iterator en dynamiskt allokerad matris. I följande exempel visas hur du gör detta.
// 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
| Constructor | Description |
|---|---|
| checked_array_iterator | Konstruerar en standard checked_array_iterator eller en checked_array_iterator från en underliggande iterator. |
Typedefs
| Typnamn | Description |
|---|---|
| difference_type | En typ som ger skillnaden mellan två checked_array_iteratorsom refererar till element i samma container. |
| Pekaren | En typ som ger en pekare till ett element som hanteras av en checked_array_iterator. |
| reference | En typ som ger en referens till ett element som hanteras av en checked_array_iterator. |
Medlemsfunktioner
| Medlemsfunktion | Description |
|---|---|
| bas | Återställer den underliggande iteratorn från dess checked_array_iterator. |
Operatorer
| Operator | Description |
|---|---|
| operator== | Testar två checked_array_iterators för likhet. |
| operator!= | Testar två checked_array_iterators för ojämlikhet. |
| operatör< | Testar om operatorn checked_array_iterator till vänster är mindre än checked_array_iterator på höger sida. |
| operatör> | Testar om operatorn checked_array_iterator till vänster är större än checked_array_iterator på höger sida. |
| operator<= | Testar om checked_array_iterator operatorn till vänster är mindre än eller lika med checked_array_iterator på höger sida. |
| operator>= | Testar om operatorn checked_array_iterator till vänster är större än eller lika med checked_array_iterator på höger sida. |
| operator* | Returnerar elementet som en checked_array_iterator adress. |
| operator-> | Returnerar en pekare till elementet som adresseras av checked_array_iterator. |
| operator++ |
checked_array_iterator Ökar till nästa element. |
| Operatör-- |
checked_array_iterator Minskar till föregående element. |
| operator+= | Lägger till en angiven förskjutning till en checked_array_iterator. |
| operator+ | Lägger till en förskjutning till en iterator och returnerar den nya checked_array_iterator adressering av det infogade elementet vid den nya förskjutningspositionen. |
| operator-= | Minskar en angiven förskjutning från en checked_array_iterator. |
| Operatör- | Minskar en förskjutning från en iterator och returnerar den nya checked_array_iterator adressering av det infogade elementet vid den nya förskjutningspositionen. |
operator[] |
Returnerar en referens till en elementförskjutning från elementet som adresseras av ett checked_array_iterator angivet antal positioner. |
Krav
Rubrik:<iterator>
Namnområde: stdext
checked_array_iterator::base
Återställer den underliggande iteratorn från dess checked_array_iterator.
_Iterator base() const;
Remarks
Mer information finns i Kontrollerade iteratorer.
Exempel
// 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
Konstruerar en standard checked_array_iterator eller en checked_array _iterator från en underliggande iterator.
checked_array_iterator();
checked_array_iterator(
ITerator ptr,
size_t size,
size_t index = 0);
Parameters
ptr
En pekare till matrisen.
storlek
Matrisens storlek.
index
(Valfritt) Ett element i matrisen för att initiera iteratorn. Som standard initieras iteratorn till det första elementet i matrisen.
Remarks
Mer information finns i Kontrollerade iteratorer.
Exempel
// 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 ifference_type
En typ som ger skillnaden mellan två checked_array_iteratorsom refererar till element i samma container.
typedef typename iterator_traits<_Iterator>::difference_type difference_type;
Remarks
Skillnadstypen checked_array_iterator är samma som iteratorns skillnadstyp.
Se checked_array_iterator::operator[] för ett kodexempel.
Mer information finns i Kontrollerade iteratorer.
checked_array_iterator::operator==
Testar två checked_array_iterators för likhet.
bool operator==(const checked_array_iterator<_Iterator>& right) const;
Parameters
rätt
Mot checked_array_iterator vilken man ska söka efter likhet.
Remarks
Mer information finns i Kontrollerade iteratorer.
Exempel
// 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!=
Testar två checked_array_iterators för ojämlikhet.
bool operator!=(const checked_array_iterator<_Iterator>& right) const;
Parameters
rätt
Mot checked_array_iterator vilken man ska söka efter ojämlikhet.
Remarks
Mer information finns i Kontrollerade iteratorer.
Exempel
// 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<
Testar om operatorn checked_array_iterator till vänster är mindre än checked_array_iterator på höger sida.
bool operator<(const checked_array_iterator<_Iterator>& right) const;
Parameters
rätt
Mot checked_array_iterator vilken man ska söka efter ojämlikhet.
Remarks
Mer information finns i Kontrollerade iteratorer.
Exempel
// 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>
Testar om operatorn checked_array_iterator till vänster är större än checked_array_iterator på höger sida.
bool operator>(const checked_array_iterator<_Iterator>& right) const;
Parameters
rätt
Att checked_array_iterator jämföra med.
Remarks
Se checked_array_iterator::operator< för ett kodexempel.
Mer information finns i Kontrollerade iteratorer.
checked_array_iterator::operator<=
Testar om checked_array_iterator operatorn till vänster är mindre än eller lika med checked_array_iterator på höger sida.
bool operator<=(const checked_array_iterator<_Iterator>& right) const;
Parameters
rätt
Att checked_array_iterator jämföra med.
Remarks
Se checked_array_iterator::operator>= för ett kodexempel.
Mer information finns i Kontrollerade iteratorer.
checked_array_iterator::operator>=
Testar om operatorn checked_array_iterator till vänster är större än eller lika med checked_array_iterator på höger sida.
bool operator>=(const checked_array_iterator<_Iterator>& right) const;
Parameters
rätt
Att checked_array_iterator jämföra med.
Remarks
Mer information finns i Kontrollerade iteratorer.
Exempel
// 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*
Returnerar elementet som en checked_array_iterator adress.
reference operator*() const;
Returvärde
Värdet för elementet som adresseras av checked_array_iterator.
Remarks
Mer information finns i Kontrollerade iteratorer.
Exempel
// 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->
Returnerar en pekare till elementet som adresseras av checked_array_iterator.
pointer operator->() const;
Returvärde
En pekare till elementet som hanteras av checked_array_iterator.
Remarks
Se checked_array_iterator::p ointer för ett kodexempel.
Mer information finns i Kontrollerade iteratorer.
checked_array_iterator::operator++
checked_array_iterator Ökar till nästa element.
checked_array_iterator& operator++();
checked_array_iterator<_Iterator> operator++(int);
Returvärde
Den första operatorn returnerar preincremented checked_array_iterator och den andra, postincrement-operatorn, returnerar en kopia av den inkrementerade checked_array_iterator.
Remarks
Mer information finns i Kontrollerade iteratorer.
Exempel
// 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--
checked_array_iterator Minskar till föregående element.
checked_array_iterator<_Iterator>& operator--();
checked_array_iterator<_Iterator> operator--(int);
Returvärde
Den första operatorn returnerar predecremented checked_array_iterator och den andra, postdecrement-operatorn, returnerar en kopia av den decrementerade checked_array_iterator.
Remarks
Mer information finns i Kontrollerade iteratorer.
Exempel
// 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+=
Lägger till en angiven förskjutning till en checked_array_iterator.
checked_array_iterator<_Iterator>& operator+=(difference_type _Off);
Parameters
_Off
Förskjutningen som iteratorn ska ökas med.
Returvärde
En referens till elementet som hanteras av checked_array_iterator.
Remarks
Mer information finns i Kontrollerade iteratorer.
Exempel
// 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+
Lägger till en förskjutning till en iterator och returnerar den nya checked_array_iterator adressering av det infogade elementet vid den nya förskjutningspositionen.
checked_array_iterator<_Iterator> operator+(difference_type _Off) const;
Parameters
_Off
Förskjutningen som ska läggas till i checked_array_iterator.
Returvärde
En checked_array_iterator adressering av förskjutningselementet.
Remarks
Mer information finns i Kontrollerade iteratorer.
Exempel
// 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-=
Minskar en angiven förskjutning från en checked_array_iterator.
checked_array_iterator<_Iterator>& operator-=(difference_type _Off);
Parameters
_Off
Förskjutningen som iteratorn ska ökas med.
Returvärde
En referens till elementet som hanteras av checked_array_iterator.
Remarks
Mer information finns i Kontrollerade iteratorer.
Exempel
// 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-
Minskar en förskjutning från en iterator och returnerar den nya checked_array_iterator adressering av det infogade elementet vid den nya förskjutningspositionen.
checked_array_iterator<_Iterator> operator-(difference_type _Off) const;
difference_type operator-(const checked_array_iterator& right) const;
Parameters
_Off
Förskjutningen som ska minskas från checked_array_iterator.
Returvärde
En checked_array_iterator adressering av förskjutningselementet.
Remarks
Mer information finns i Kontrollerade iteratorer.
checked_array_iterator::operator[]
Returnerar en referens till en elementförskjutning från elementet som adresseras av ett checked_array_iterator angivet antal positioner.
reference operator[](difference_type _Off) const;
Parameters
_Off
Förskjutningen från checked_array_iterator adressen.
Returvärde
Referensen till elementförskjutningen.
Remarks
Mer information finns i Kontrollerade iteratorer.
Exempel
// 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
En typ som ger en pekare till ett element som hanteras av en checked_array_iterator.
typedef typename iterator_traits<_Iterator>::pointer pointer;
Remarks
Se checked_array_iterator::operator* för ett kodexempel.
Mer information finns i Kontrollerade iteratorer.
checked_array_iterator::reference
En typ som ger en referens till ett element som hanteras av en checked_array_iterator.
typedef typename iterator_traits<_Iterator>::reference reference;
Remarks
Se checked_array_iterator::operator[] för ett kodexempel.
Mer information finns i Kontrollerade iteratorer.