Bagikan melalui


Kelas checked_array_iterator

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.

Lihat juga

<iterator>
Referensi pustaka standar C++