2010-05-03 66 views
21

Có ai biết thư viện cấu trúc dữ liệu C++ cung cấp chức năng (a.k.a. không thay đổi hoặc "liên tục" trong ý nghĩa FP) tương đương của cấu trúc STL quen thuộc không?Cấu trúc dữ liệu chức năng trong C++

Bằng "chức năng", có nghĩa là bản thân các đối tượng không thay đổi, trong khi sửa đổi đối tượng đó trả về các đối tượng mới chia sẻ cùng nội bộ làm đối tượng cha khi thích hợp. Lý tưởng nhất, thư viện như vậy sẽ giống như STL, và sẽ làm việc tốt với Boost.Phoenix (caveat-tôi đã không thực sự sử dụng Phoenix, nhưng theo như tôi có thể nói nó cung cấp nhiều thuật toán nhưng không có cấu trúc dữ liệu, trừ khi một thay đổi được tính toán đến số lượng cấu trúc dữ liệu hiện có - phải không?)

+0

Bạn có thể không nhận được hiệu ứng theo yêu cầu bằng cách chuyển và trả về tất cả các đối tượng theo giá trị không? –

+4

Chỉ khi tôi có thể chịu được hiệu năng và phí trên bộ nhớ. Bí quyết với cấu trúc dữ liệu chức năng là chúng chia sẻ nội bộ ở bất cứ nơi nào có thể. Điều này là an toàn để làm bởi vì các đối tượng là bất biến, và ít hơn nhiều bộ nhớ và xử lý đói hơn là chỉ trở về theo giá trị trên các cấu trúc dữ liệu lớn. – drg

+6

Tôi đã thực sự quan tâm đến cùng một câu hỏi trong khi đồng viết báo cáo kinh nghiệm tại http://portal.acm.org/citation.cfm?id=1596591. Kết luận của tôi vào thời điểm đó là bạn thực sự cần thu gom rác thải: lợi thế của cấu trúc liên tục là chia sẻ, nhưng với sự hiện diện của việc chia sẻ thì không còn quyền sở hữu rõ ràng của bất kỳ nút nào, do đó một số loại quyền hạn trung tâm (GC) phải quyết định nút nào có thể được khai hoang. Điều đó, hoặc nó không quan trọng đối với ứng dụng của bạn mà các nút chỉ được phân bổ và không bao giờ được giải phóng. –

Trả lời

3

Tôi sẽ xem xét liệu FC++ được phát triển bởi Yannis Smaragdakis có bao gồm bất kỳ cấu trúc dữ liệu nào không. Chắc chắn dự án này nhiều hơn bất kỳ dự án nào khác về hỗ trợ một kiểu dáng chức năng trong C++.

+0

Trông giống như một thư viện thú vị, không có hoạt động nào gần đây. Có một kiểu dữ liệu danh sách liên tục trong đó, nhưng nó có vẻ không tốt cho việc sử dụng chung bên ngoài FC++. – drg

1

Đây là câu trả lời chi tiết hơn một câu trả lời chi tiết, nhưng Bartosz Milewski dường như đã thực hiện rất nhiều công việc về vấn đề này. Xem, ví dụ:

http://bartoszmilewski.com/2013/11/13/functional-data-structures-in-c-lists/

Hình như anh ấy thực hiện rất nhiều các thuật toán từ cuốn sách Okasiki của Cấu trúc dữ liệu thuần túy chức năng ở đây:

https://github.com/BartoszMilewski/Okasaki

N.B. Tôi chưa thử những điều này, nhưng chúng là cấu trúc dữ liệu liên tục C++ đầu tiên mà tôi đã thấy bên ngoài FC++.

Hy vọng rằng, tôi sẽ sớm thử chúng.

+0

Chúng dường như thiếu các phần quan trọng ... như xóa – Michael

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