2012-02-28 14 views
5

için yeniden canlandırmak.C++ Vektör kütüphanesi, C++ Vektör kütüphanesi yeniden gerekiyor ve şu anda maksimum boyutu dönmek için nasıl şaşırıp bir görev için Atama, maksimum boyut fonksiyonu

Bu siteye göre: http://www.cplusplus.com/reference/stl/vector/ size_type max_size() const; en büyük boyut

Dönüş vektör kabı tutabilir elemanlarının sayısını verir.


anda benim fonksiyonları Dizilerin manipülasyon dayanmaktadır ve vektör kütüphanesi şablon sınıfına dayanmayan, vektör kütüphanesi int ve size_t veri türleri kullanır. Verilen buradan linkte itibaren

class vector{ 
private: 
int *vect; 
size_t length; 
size_t cap; 

public: 
//=====================Constructor================ 
vector(){ 
    length = 0; 
    cap = 20; 
    vect = new int[20]; 
} 

//INCOMPLETE 
size_t max_size() const{ 
    //return???!?!?!?!? 
} 

}

+0

Sorunuz nedir? Dizinizdeki öğe sayısını takip etmelisiniz. Benim tahmin ettiğim şey "uzunluk". – birryree

+0

Hayır, C++ başvuru web sitesine göre: Bu, şu anda vektöre tahsis edilen depolama alanı miktarı değildir (bu, üye vektörü :: kapasite ile elde edilebilir), ancak sistemin sisteme erişebileceği maksimum potansiyel boyuttur. veya kütüphane uygulama sınırlamaları. –

+0

Sadece stl vektörünün max_size() işlevinin döndürdüğü ve işlevinize koyduğu sabiti bulmaya çalışın. : size_t max_size() const {return some_huge_number_here; } ' –

cevap

1

:

ancak maksimum potansiyel büyüklüğü

İlgili kod (Buna daha üzerinde etkiye sahip olup olmadığından emin değilim) vektör nedeniyle sistem veya kütüphane uygulaması sınırlamalara ulaşabilir

Sizin durumda max_size, sistemdeki bir tamsayı dizisinin maksimum boyutudur.

+0

Bunu nasıl ölçüyorsunuz ve döndürün, sistemin fiziksel belleğindeki maksimum boyuta bağlı değil, aynı zamanda veri türü de –

+0

Tek sınır, std :: size_t değerinin maksimum değeridir. Dizinin bölümleri her zaman pullanılabilir. Ayrıca, buraya bir göz atın: http://stackoverflow.com/questions/216259/is-there-a-max-array-length-limit-in-c – devil

4

Bu kütüphane/kodu veya sistem içindeki kısıtlamaları nedeniyle maksimum boyutu ile ilgili olan. için numaralı çok iyi bir örnek için, uygulamanızın vektörünüzdeki kayıt sayısını saklamak için işaretsiz bir kısa (2 bayt) numara kullandığını varsayalım. Ardından, max_size işleviniz, kitaplığınız yetersiz uygulama nedeniyle bu sınırlamaya sahip olacağından 65,536 dönecektir.

Vektörünüzün bayt cinsinden maksimum boyutunun 4G ile sınırlandığını ve kapsayıcıda bulunan boyutun örnek başına 128 bayt olduğunu biliyorsanız, başka bir ve daha gerçekçi örnek olarak, bu durumda, max_size birşeyi bir değere döndürür 33,554,431. Aşağıda (0xFFFFFFFF/128)

bu C benim uygulanmasında ++ yapılır nasıl. Esas olarak, size_type (imzasız varlık-1) değerinin en büyük değerini bulmak ve bunu, vektör içinde saklanan nesnenin boyutuna bölmek. (value_type) 32 bit donanımda, size_type(-1), 4,294,967,295 değerini verir ve unsigned int değerini saklıyorsanız, sizeof(value_type) değeriniz, size max_size() 1.073,741.823 dönüş değeri veren 4 bayt verir.

/** Returns the size() of the largest possible %vector. */ 
size_type max_size() const 
{ 
    return size_type(-1)/sizeof(value_type); 
} 
+0

Farklı sistemler için maksimum boyutu belirleyen herhangi bir yöntem var mı sistem donanım sınırlamalarını bilmeden bir şablon sınıfı, orada hayal ediyorum, ama yeni bir C++ öğrenci olarak, bu nasıl mümkün olacağını gerçekten emin değilim –

+0

Ben yorumunuzu dayalı cevabımı düzenledim. –