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?)
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? –
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
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. –