vector.size () bulgular beklenmedik bir şekilde çalışmaktadır

oy
0

Ben karşılaştırmalarda vector.size () kullandığınızda beklenmedik sonuçlar verir

vector<int> v;
for(int i = 0; i < v.size() -1;++i){
    printf(i = %d\n, i);
    printf(v[i] = %d\n, v[i]);
}

Vektörün büyüklüğü 0 olduğundan, bir şey yazdırmak ancak, bu döngü ve baskılar için girdiği shoudn't i = 0ve segmentasyon hatası verir. Ama o bile döngü girmemeniz gerekir v.size() - 1olduğunu -1.

Neden oluyor?

Oluştur 20/10/2018 saat 14:19
kaynak kullanıcı
Diğer dillerde...                            


2 cevaplar

oy
4

Sorun döngü:

 for(int i = 0; i < v.size() -1;++i)

Daha spesifik olarak, durumun bu kısmı: v.size() - 1.

sizeFonksiyon türünde bir değer döndürür size_typesen mesela okursanız, bu vectorreferans görecek bir olan işaretsiz türü.

Yani çıkarma sırasında demektir 1değerinden 0, sen alamadım -1ama imzasız Yetersizlik en yüksek değerine sarar beri yerine çok büyük bir değer olsun.

Bu senin döngü aslında en az bir kez, yineleme ve UB (Tanımsız Davranışı) sınırların dışına indeksine götüreceği anlamına geliyor.

Cevap 20/10/2018 saat 14:25
kaynak kullanıcı

oy
1

Vektör boyutu o kadar v.size, işaretsiz int () - 1 -1 ancak bazı çok büyük tamsayı olmayacak.

Cevap 20/10/2018 saat 14:26
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more