2012-02-28 21 views
5

Để gán bài, tôi phải tạo lại thư viện C++ Vector và hiện tại tôi đang mắc kẹt về cách trả về kích thước tối đa.Thư viện C++ Vector, Tạo lại bài tập, chức năng kích thước tối đa

Theo trang web này: http://www.cplusplus.com/reference/stl/vector/ size_type max_size() const; Trả lại kích thước tối đa

Trả về số lượng tối đa các phần tử mà vùng chứa vector có thể giữ.


Hiện tại chức năng của tôi dựa trên thao tác mảng và thư viện vector không dựa trên lớp mẫu, thư viện vector sử dụng kiểu dữ liệu int và size_t. (Tôi không chắc chắn liệu điều này có bất kỳ mang về nó)

đang liên quan:

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

Câu hỏi của bạn là gì? Bạn phải theo dõi số lượng phần tử trong mảng của mình. Mà tôi giả định là 'length'. – birryree

+0

Không, theo trang web tham khảo C++, nó nói: Đây không phải là dung lượng lưu trữ hiện được phân bổ cho vectơ (điều này có thể thu được với dung lượng vector thành viên), nhưng kích thước tối đa mà vectơ có thể đạt được do hệ thống hoặc giới hạn triển khai thư viện. –

+0

Chỉ cần tìm ra hằng số rằng max_size của vectơ stl() trả về và đặt nó vào hàm của bạn? 'size_t max_size() const {return some_huge_number_here; } ' –

Trả lời

1

Từ đây trong liên kết của bạn đưa ra:

nhưng kích thước tối đa tiềm năng của vectơ có thể đạt được do giới hạn triển khai hệ thống hoặc thư viện

Trong trường hợp của bạn, max_size là kích thước tối đa của một mảng nguyên trên hệ thống.

+0

Làm thế nào để bạn đo lường và trả về nó, không phải là kích thước tối đa phụ thuộc vào bộ nhớ vật lý của hệ thống cũng như kiểu dữ liệu –

+0

Một giới hạn là giá trị tối đa của std :: size_t. Các phần của mảng luôn có thể được phân trang. Ngoài ra, hãy xem tại đây: http://stackoverflow.com/questions/216259/is-there-a-max-array-length-limit-in-c – devil

4

Điều này liên quan đến kích thước tối đa do các giới hạn trong thư viện/mã hoặc hệ thống của bạn. Đối với ví dụ rất giả tạo, hãy nói rằng việc triển khai của bạn đã sử dụng số không có ký hiệu ngắn (2 byte) để lưu trữ số lượng bản ghi trong vectơ của bạn. Sau đó, hàm max_size của bạn sẽ trả lại 65,536 vì thư viện của bạn sẽ có giới hạn này do thực hiện kém. Một ví dụ khác và thực tế hơn, nếu bạn biết rằng kích thước tối đa của vector của bạn tính bằng byte được giới hạn ở 4G và kích thước được chứa trong vùng chứa là 128 byte cho mỗi trường hợp, thì max_size sẽ trả về điều gì đó cho giai điệu trong số 33.554.431. (0xFFFFFFFF/128)

Dưới đây là cách thực hiện điều này trong việc triển khai C++ của tôi. Về cơ bản, việc tìm giá trị lớn nhất của size_type (unsigned là -1) sau đó chia cho kích thước của đối tượng được lưu trữ trong vectơ. (value_type) Trên phần cứng 32 bit, size_type(-1) sẽ mang lại 4,294,967,295 và nếu bạn đang lưu trữ unsigned int giá trị sizeof(value_type) sẽ mang lại 4 byte cho bạn giá trị trả về 1.073.741.823.

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

Có phương pháp nào để xác định kích thước tối đa cho các hệ thống khác nhau sử dụng hay không một mẫu lớp mà không biết giới hạn phần cứng hệ thống, tôi tưởng tượng ở đó, nhưng là một sinh viên C++ mới, tôi thực sự không chắc chắn nếu/làm thế nào điều này sẽ có thể –

+0

Tôi đã chỉnh sửa câu trả lời của tôi dựa trên bình luận của bạn. –

Các vấn đề liên quan