Rumah > Artikel > pembangunan bahagian belakang > Mengapa Anda Perlu Menggunakan Integer Bertandatangan Apabila Merelakan Atas std::vector Menggunakan Indeks?
Dalam C , terdapat dua pendekatan biasa untuk lelaran ke atas vektor: menggunakan iterator atau menggunakan indeks. Apabila menggunakan indeks, adalah penting untuk mempertimbangkan jenis pembolehubah indeks.
Iterators ialah cara yang mudah untuk melelaran pada bekas. Mereka menyediakan antara muka yang seragam untuk pelbagai jenis bekas, dan mereka membenarkan traversal elemen yang cekap. Kod berikut menunjukkan cara untuk lelaran ke atas vektor menggunakan iterator:
for (auto it = v.begin(); it != v.end(); ++it) { // do something with *it }
Apabila melelaran ke atas vektor menggunakan indeks, adalah penting untuk menggunakan pembolehubah indeks yang ditandatangani. Ini kerana vektor diindeks daripada 0 kepada saiz() - 1, dan pembolehubah yang ditandatangani boleh mewakili julat ini secara lebih semula jadi. Dalam contoh berikut, int yang ditandatangani digunakan untuk mengindeks vektor:
for (int i = 0; i < v.size(); i++) { // do something with v[i] }
Menggunakan pembolehubah indeks yang tidak ditandatangani boleh berbahaya kerana ia boleh membawa kepada tingkah laku yang tidak ditentukan jika indeks melebihi saiz vektor. Ini kerana pembolehubah yang tidak ditandatangani melilit apabila ia mencapai nilai maksimumnya dan ini boleh menyebabkan indeks menjadi negatif, yang bukan indeks yang sah untuk vektor.
Dalam contoh berikut, int yang tidak ditandatangani ialah digunakan untuk mengindeks vektor, dan jika saiz vektor adalah lebih besar daripada nilai maksimum int yang tidak ditandatangani, indeks akan membungkus dan menjadi negatif, mengakibatkan tingkah laku yang tidak ditentukan:
for (unsigned int i = 0; i < v.size(); i++) { // do something with v[i] }
Apabila melelaran pada vektor, adalah lebih baik untuk menggunakan pembolehubah indeks yang ditandatangani. Ini kerana ia memastikan bahawa indeks akan sentiasa berada dalam julat yang sah untuk vektor dan mengelakkan potensi untuk tingkah laku yang tidak ditentukan.
Atas ialah kandungan terperinci Mengapa Anda Perlu Menggunakan Integer Bertandatangan Apabila Merelakan Atas std::vector Menggunakan Indeks?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!