Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Kelas ini checked_array_iterator memungkinkan Anda mengubah array atau penunjuk menjadi iterator yang dicentang. Gunakan kelas ini sebagai pembungkus (menggunakan fungsi make_checked_array_iterator ) untuk pointer atau array mentah sebagai cara yang ditargetkan untuk memberikan pemeriksaan dan mengelola peringatan pointer yang tidak dicentang alih-alih membungkus peringatan ini secara global. Jika perlu, Anda dapat menggunakan versi kelas ini yang tidak dicentang, unchecked_array_iterator.
Catatan
Kelas ini adalah ekstensi Microsoft dari Pustaka Standar C++. Kode yang diterapkan dengan menggunakan fungsi ini tidak portabel ke lingkungan build Standar C++ yang tidak mendukung ekstensi Microsoft ini. Untuk contoh yang menunjukkan cara menulis kode yang tidak memerlukan penggunaan kelas ini, lihat contoh kedua di bawah ini.
Sintaks
template <class _Iterator>
class checked_array_iterator;
Keterangan
Kelas ini didefinisikan dalam namespace stdext .
Untuk informasi selengkapnya dan contoh kode pada fitur iterator yang diperiksa, lihat Iterator yang Diperiksa.
Contoh
Contoh berikut menunjukkan cara menentukan dan menggunakan iterator array yang dicentang.
Jika tujuan tidak cukup besar untuk menahan semua elemen yang disalin, seperti akan terjadi jika Anda mengubah baris:
copy(a, a + 5, checked_array_iterator<int*>(b, 5));
ke
copy(a, a + 5, checked_array_iterator<int*>(b, 4));
Kesalahan runtime akan terjadi.
// 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 )
*/
Untuk menghindari kebutuhan kelas saat menggunakan algoritma Pustaka Standar C++, pertimbangkan untuk checked_array_iterator menggunakan vector alih-alih array yang dialokasikan secara dinamis. Contoh berikut menunjukkan cara melakukannya.
// 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
*/
Konstruktor
| Konstruktor | Deskripsi |
|---|---|
| checked_array_iterator | Membuat default checked_array_iterator atau checked_array_iterator dari iterator yang mendasar. |
Typedefs
| Nama jenis | Deskripsi |
|---|---|
| difference_type | Jenis yang menyediakan perbedaan antara dua checked_array_iteratoryang mengacu pada elemen dalam kontainer yang sama. |
| Pointer | Jenis yang menyediakan penunjuk ke elemen yang ditangani oleh checked_array_iterator. |
| referensi | Jenis yang menyediakan referensi ke elemen yang ditangani oleh checked_array_iterator. |
Fungsi anggota
| Fungsi anggota | Deskripsi |
|---|---|
| dasar | Memulihkan iterator yang mendasar dari checked_array_iterator. |
Operator
| Operator | Deskripsi |
|---|---|
| operator== | Menguji dua checked_array_iterators untuk kesetaraan. |
| operator!= | Menguji dua checked_array_iterators untuk ketidaksamaan. |
| operator< | Menguji apakah checked_array_iterator di sisi kiri operator kurang dari checked_array_iterator di sisi kanan. |
| operator> | Menguji apakah checked_array_iterator di sisi kiri operator lebih besar dari checked_array_iterator di sisi kanan. |
| operator<= | Menguji apakah checked_array_iterator di sisi kiri operator kurang dari atau sama dengan checked_array_iterator di sisi kanan. |
| operator>= | Pengujian jika checked_array_iterator di sisi kiri operator lebih besar dari atau sama dengan checked_array_iterator di sisi kanan. |
| Operator* | Mengembalikan elemen yang ditangani checked_array_iterator . |
| Operator-> | Mengembalikan penunjuk ke elemen yang ditangani oleh checked_array_iterator. |
| operator++ | Menaikkan checked_array_iterator ke elemen berikutnya. |
| Operator-- | checked_array_iterator Mengurangi ke elemen sebelumnya. |
| operator+= | Menambahkan offset tertentu ke checked_array_iterator. |
| operator+ | Menambahkan offset ke iterator dan mengembalikan alamat baru checked_array_iterator elemen yang disisipkan pada posisi offset baru. |
| operator-= | Mengurangi offset tertentu dari checked_array_iterator. |
| Operator- | Mengurangi offset dari iterator dan mengembalikan alamat baru checked_array_iterator elemen yang disisipkan pada posisi offset baru. |
operator[] |
Mengembalikan referensi ke offset elemen dari elemen yang checked_array_iterator ditangani oleh sejumlah posisi tertentu. |
Persyaratan
Header:<iterator>
Namespace: stdext
checked_array_iterator::base
Memulihkan iterator yang mendasar dari checked_array_iterator.
_Iterator base() const;
Keterangan
Untuk informasi selengkapnya, lihat Iterator yang Diperiksa.
Contoh
// 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
Membuat default checked_array_iterator atau checked_array _iterator dari iterator yang mendasar.
checked_array_iterator();
checked_array_iterator(
ITerator ptr,
size_t size,
size_t index = 0);
Parameter
ptr
Penunjuk ke array.
ukuran
Ukuran array.
index
(Opsional) Elemen dalam array, untuk menginisialisasi iterator. Secara default, iterator diinisialisasi ke elemen pertama dalam array.
Keterangan
Untuk informasi selengkapnya, lihat Iterator yang Diperiksa.
Contoh
// 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
Jenis yang menyediakan perbedaan antara dua checked_array_iteratoryang mengacu pada elemen dalam kontainer yang sama.
typedef typename iterator_traits<_Iterator>::difference_type difference_type;
Keterangan
Jenis checked_array_iterator perbedaannya sama dengan jenis perbedaan iterator.
Lihat checked_array_iterator::operator[] untuk sampel kode.
Untuk informasi selengkapnya, lihat Iterator yang Diperiksa.
checked_array_iterator::operator==
Menguji dua checked_array_iterators untuk kesetaraan.
bool operator==(const checked_array_iterator<_Iterator>& right) const;
Parameter
right
yang checked_array_iterator akan memeriksa kesetaraan.
Keterangan
Untuk informasi selengkapnya, lihat Iterator yang Diperiksa.
Contoh
// 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!=
Menguji dua checked_array_iterators untuk ketidaksamaan.
bool operator!=(const checked_array_iterator<_Iterator>& right) const;
Parameter
right
yang checked_array_iterator akan memeriksa ketidaksamaan.
Keterangan
Untuk informasi selengkapnya, lihat Iterator yang Diperiksa.
Contoh
// 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<
Menguji apakah checked_array_iterator di sisi kiri operator kurang dari checked_array_iterator di sisi kanan.
bool operator<(const checked_array_iterator<_Iterator>& right) const;
Parameter
right
yang checked_array_iterator akan memeriksa ketidaksamaan.
Keterangan
Untuk informasi selengkapnya, lihat Iterator yang Diperiksa.
Contoh
// 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>
Menguji apakah checked_array_iterator di sisi kiri operator lebih besar dari checked_array_iterator di sisi kanan.
bool operator>(const checked_array_iterator<_Iterator>& right) const;
Parameter
right
untuk checked_array_iterator membandingkan dengan.
Keterangan
Lihat checked_array_iterator::operator< untuk sampel kode.
Untuk informasi selengkapnya, lihat Iterator yang Diperiksa.
checked_array_iterator::operator<=
Menguji apakah checked_array_iterator di sisi kiri operator kurang dari atau sama dengan checked_array_iterator di sisi kanan.
bool operator<=(const checked_array_iterator<_Iterator>& right) const;
Parameter
right
untuk checked_array_iterator membandingkan dengan.
Keterangan
Lihat checked_array_iterator::operator>= untuk sampel kode.
Untuk informasi selengkapnya, lihat Iterator yang Diperiksa.
checked_array_iterator::operator>=
Pengujian jika checked_array_iterator di sisi kiri operator lebih besar dari atau sama dengan checked_array_iterator di sisi kanan.
bool operator>=(const checked_array_iterator<_Iterator>& right) const;
Parameter
right
untuk checked_array_iterator membandingkan dengan.
Keterangan
Untuk informasi selengkapnya, lihat Iterator yang Diperiksa.
Contoh
// 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*
Mengembalikan elemen yang ditangani checked_array_iterator .
reference operator*() const;
Tampilkan Nilai
Nilai elemen yang ditangani oleh checked_array_iterator.
Keterangan
Untuk informasi selengkapnya, lihat Iterator yang Diperiksa.
Contoh
// 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->
Mengembalikan penunjuk ke elemen yang ditangani oleh checked_array_iterator.
pointer operator->() const;
Tampilkan Nilai
Penunjuk ke elemen yang ditangani oleh checked_array_iterator.
Keterangan
Lihat checked_array_iterator::p ointer untuk sampel kode.
Untuk informasi selengkapnya, lihat Iterator yang Diperiksa.
checked_array_iterator::operator++
Menaikkan checked_array_iterator ke elemen berikutnya.
checked_array_iterator& operator++();
checked_array_iterator<_Iterator> operator++(int);
Tampilkan Nilai
Operator pertama mengembalikan operator yang telah diindeks checked_array_iterator sebelumnya dan yang kedua, operator postincrement, mengembalikan salinan tahapan checked_array_iterator.
Keterangan
Untuk informasi selengkapnya, lihat Iterator yang Diperiksa.
Contoh
// 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 Mengurangi ke elemen sebelumnya.
checked_array_iterator<_Iterator>& operator--();
checked_array_iterator<_Iterator> operator--(int);
Tampilkan Nilai
Operator pertama mengembalikan operator yang telah ditentukan checked_array_iterator sebelumnya dan yang kedua, operator postdecrement, mengembalikan salinan yang direkrementasikan checked_array_iterator.
Keterangan
Untuk informasi selengkapnya, lihat Iterator yang Diperiksa.
Contoh
// 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+=
Menambahkan offset tertentu ke checked_array_iterator.
checked_array_iterator<_Iterator>& operator+=(difference_type _Off);
Parameter
_Off
Offset untuk menaikkan iterator.
Tampilkan Nilai
Referensi ke elemen yang ditangani oleh checked_array_iterator.
Keterangan
Untuk informasi selengkapnya, lihat Iterator yang Diperiksa.
Contoh
// 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+
Menambahkan offset ke iterator dan mengembalikan alamat baru checked_array_iterator elemen yang disisipkan pada posisi offset baru.
checked_array_iterator<_Iterator> operator+(difference_type _Off) const;
Parameter
_Off
Offset yang akan ditambahkan ke checked_array_iterator.
Tampilkan Nilai
Mengatasi checked_array_iterator elemen offset.
Keterangan
Untuk informasi selengkapnya, lihat Iterator yang Diperiksa.
Contoh
// 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-=
Mengurangi offset tertentu dari checked_array_iterator.
checked_array_iterator<_Iterator>& operator-=(difference_type _Off);
Parameter
_Off
Offset untuk menaikkan iterator.
Tampilkan Nilai
Referensi ke elemen yang ditangani oleh checked_array_iterator.
Keterangan
Untuk informasi selengkapnya, lihat Iterator yang Diperiksa.
Contoh
// 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-
Mengurangi offset dari iterator dan mengembalikan alamat baru checked_array_iterator elemen yang disisipkan pada posisi offset baru.
checked_array_iterator<_Iterator> operator-(difference_type _Off) const;
difference_type operator-(const checked_array_iterator& right) const;
Parameter
_Off
Offset yang akan diturunkan dari checked_array_iterator.
Tampilkan Nilai
Mengatasi checked_array_iterator elemen offset.
Keterangan
Untuk informasi selengkapnya, lihat Iterator yang Diperiksa.
checked_array_iterator::operator[]
Mengembalikan referensi ke offset elemen dari elemen yang checked_array_iterator ditangani oleh sejumlah posisi tertentu.
reference operator[](difference_type _Off) const;
Parameter
_Off
Offset dari checked_array_iterator alamat.
Tampilkan Nilai
Referensi ke offset elemen.
Keterangan
Untuk informasi selengkapnya, lihat Iterator yang Diperiksa.
Contoh
// 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
Jenis yang menyediakan penunjuk ke elemen yang ditangani oleh checked_array_iterator.
typedef typename iterator_traits<_Iterator>::pointer pointer;
Keterangan
Lihat checked_array_iterator::operator* untuk sampel kode.
Untuk informasi selengkapnya, lihat Iterator yang Diperiksa.
checked_array_iterator::referensi
Jenis yang menyediakan referensi ke elemen yang ditangani oleh checked_array_iterator.
typedef typename iterator_traits<_Iterator>::reference reference;
Keterangan
Lihat checked_array_iterator::operator[] untuk sampel kode.
Untuk informasi selengkapnya, lihat Iterator yang Diperiksa.