tôi muốn làm chỉ này bản thân mình thời gian gần đây và thấy đoạn mã sau chiếu sáng:
Chronium's stack_container.h
Nó định nghĩa một mới std::allocator
có thể cung cấp phân bổ dựa trên stack cho việc phân bổ ban đầu lưu trữ cho STL container. Tôi tìm ra cách khác để giải quyết vấn đề cụ thể của mình, vì vậy tôi đã không thực sự sử dụng mã đó, nhưng có lẽ nó sẽ hữu ích cho bạn. Hãy chắc chắn để đọc các ý kiến trong các mã liên quan đến cách sử dụng và báo trước.
Đối với những ai đã đặt câu hỏi về tiện ích và sự tỉnh táo để làm điều này, hãy xem xét:
- Thông thường bạn biết một tiên nghiệm rằng chuỗi của bạn có kích thước tối đa hợp lý. Ví dụ: nếu chuỗi sẽ lưu trữ một số nguyên 32 bit được định dạng thập phân, bạn biết rằng bạn không cần nhiều hơn 11 ký tự để làm như vậy. Không cần một chuỗi có thể phát triển động đến kích thước không giới hạn trong trường hợp đó.
- Phân bổ từ ngăn xếp nhanh hơn trong nhiều trường hợp so với phân bổ từ vùng heap.
- Nếu chuỗi được tạo và hủy thường xuyên (giả sử nó là một biến cục bộ trong một hàm tiện ích thường được sử dụng), phân bổ từ ngăn xếp thay vì vùng heap sẽ tránh sự phân mảnh trong phân bổ heap. Đối với các ứng dụng sử dụng nhiều bộ nhớ, điều này có thể là một sự thay đổi trò chơi.
Một số người đã nhận xét rằng chuỗi sử dụng phân bổ dựa trên ngăn xếp sẽ không phải là std::string
như thể bằng cách nào đó làm giảm tiện ích của nó. Đúng, bạn không thể sử dụng hai thay thế cho nhau, vì vậy bạn sẽ không thể chuyển số stackstring
của mình cho các chức năng mong đợi một số std::string
. Nhưng (nếu bạn làm đúng), bạn sẽ có thể sử dụng tất cả các chức năng thành viên giống nhau trên stackstring
mà bạn sử dụng ngay bây giờ trên std::string
, như find_first_of()
, append()
, v.v. begin()
và end()
vẫn hoạt động tốt, vì vậy bạn sẽ có thể sử dụng nhiều thuật toán STL. Chắc chắn, nó sẽ không được std::string
theo nghĩa hẹp nhất, nhưng nó vẫn sẽ là một "chuỗi" theo nghĩa thực tế, và nó vẫn sẽ khá hữu ích.
Nguồn
2009-04-24 02:37:26
Hãy để tôi sửa đổi điều đó thành "làm cách nào tôi có thể tạo std :: basic_string được phân bổ hoàn toàn trên ngăn xếp?" – poindexter
Chỉ cần liên kết đến một câu hỏi tương tự: http://stackoverflow.com/questions/354442/looking-for-c-stl-like-vector-class-but-using-stack-storage –