Tôi đã tự hỏi trong trường hợp nào bạn sẽ sử dụng một sợi dây thừng trên một container STL?STL Rope - khi nào và ở đâu để sử dụng
Trả lời
Dây thừng là một khả năng mở rộng chuỗi thực hiện: chúng được thiết kế cho hoạt động hiệu quả có liên quan đến chuỗi như một toàn thể. Các hoạt động như chuyển nhượng , ghép nối và chuỗi thời gian mất gần độc lập với độ dài của chuỗi . Không giống như dây C, dây là biểu diễn hợp lý cho các chuỗi dài rất như chỉnh sửa bộ đệm hoặc thư.
Ưu:
nhanh hơn nhiều nối và chuỗi các hoạt động liên quan đến dài chuỗi. Chèn một ký tự ở số giữa một dây 10 megabyte phải theo thứ tự 10s của micro giây, ngay cả khi bản sao của gốc được giữ lại, ví dụ: như một phần của lịch sử chỉnh sửa . Ngược lại, điều này sẽ theo thứ tự của một giây cho chuỗi "phẳng" thông thường đại diện. Thời gian cần thiết cho kết nối có thể được xem là không đổi đối với hầu hết các ứng dụng. Đó là hoàn toàn hợp lý để sử dụng sợi dây như trình bày tệp bên trong trình chỉnh sửa văn bản .
Tiềm năng tốt hơn nhiều không gian hiệu suất. Sửa đổi nhỏ của dây đeo có thể chia sẻ bộ nhớ với bản gốc. Dây thừng được phân bổ trong nhỏ khối, giảm đáng kể bộ nhớ vấn đề phân mảnh được giới thiệu bởi khối lớn
Phân chỉ đơn giản là một (có thể tham khảo tính) giao con trỏ. Không giống như các bản sao chép được tính tham chiếu, điều này vẫn còn phần lớn là đúng ngay cả khi một trong các bản sao là sau đó được sửa đổi một chút. Đó là rất rẻ để kiểm tra điểm cũ phiên bản của một chuỗi, ví dụ: trong lịch sử chỉnh sửa .
Có thể xem hàm tạo ký tự làm sợi dây thừng. Do đó, một đoạn dây của có thể là một tệp 100MByte , chỉ đọc khi phần của chuỗi được kiểm tra. Ghép nối chuỗi vào cuối một tệp như vậy không liên quan đến việc đọc tệp. (Hiện tại việc triển khai của cơ sở này là chưa đầy đủ.)
Đây là giải pháp thay thế phi tiêu chuẩn cho string
xử lý các kích thước dữ liệu lớn. Xem here để biết cách hoạt động.
tôi sẽ không sử dụng nó ở tất cả, nhưng đó là bởi vì tôi là chút của một "tính di động dễ dàng" quái vật, và chỉ có xu hướng sử dụng container bog tiêu chuẩn. Dây là một phần của việc thực hiện STL của SGI, và không phải là một phần của tiêu chuẩn C++.
+1 đó là nơi tôi lần đầu tiên đọc về nó, nhưng không nhận ra nó không phải là một phần của tiêu chuẩn. – Konrad
Mặt khác, có lẽ sẽ dễ dàng chỉ sao chép mã? Hoặc giấy phép SGI STL có ngăn không? –
-1 STLPort (libre/free) và libstdC++ (trong gcc của GNU) đều hỗ trợ
Điều xấu duy nhất với dây là chủ đề và lạm dụng.
Trong Linux (và có thể là hầu hết các hệ điều hành khác), mã chuỗi an toàn là điều làm cho dây thừng chậm hơn rất nhiều. Vì vậy, tôi chỉ trích xuất mã đó ra (thiết lập một trình biên dịch def cho chủ đề-off), bởi vì tôi đang sử dụng một chủ đề duy nhất trong một nền tảng nhúng.
Nếu không, dây dẫn nhanh hơn nhiều so với dây, ít có khả năng thoát khỏi bộ nhớ trên bộ đệm lớn và nhanh hơn nhiều cho các chỉnh sửa bộ đệm lớn; Chẳng hạn như loại bỏ một nhân vật xấu ở giữa Kinh Thánh.
Điều này là do cách thức một sợi dây được hiểu là dữ liệu. Như rất nhiều nhỏ hơn 'chuỗi' xích lại với nhau thông qua một danh sách liên kết để sản xuất chuỗi cuối cùng.
"dây là nhanh hơn nhiều so với dây": không phải cho tất cả các nhiệm vụ. Lấy một ký tự trong một sợi dây bằng chỉ số của nó là nhanh hơn cho một chuỗi hơn cho một sợi dây thừng. –
@Alexandre, nhưng điều này là thực hành xấu *** ngay cả đối với std :: string. Tốt hơn nhiều để sử dụng một vector của char trong trường hợp đó. – unixman83
chuỗi trong C++ 0x được bảo đảm để lưu trữ các ký tự liên tục, do đó, đây không phải là thực hành xấu nữa. –
Có rất nhiều sự nhấn mạnh ở đây trên các chuỗi tạo thành từ các ký tự, nhưng dây chỉ đơn giản là một chuỗi 1D với chèn nhanh và xóa (bất cứ nơi nào trong chuỗi).
Có vẻ hơi ngạc nhiên khi khả năng cơ bản như vậy hiếm khi được yêu cầu cho bất kỳ thứ gì (ngoài dây). Tôi sẽ sử dụng một sợi dây số nguyên ở đâu? Tôi không biết, bởi vì thao tác nó đòi hỏi các chỉ số đến từ đâu đó.
Ví dụ thực tế tốt nhất sẽ là nơi tôi tạo giao diện người dùng để người dùng xem tập dữ liệu được tạo thành từ hàng nghìn hình ảnh và người dùng cần xóa một số ảnh và sắp xếp lại thứ tự của những người khác.
Trình soạn thảo văn bản là một ví dụ thực tế không được giả tạo về tính hữu ích của cấu trúc dữ liệu dây. – JJF
- 1. Khi nào và ở đâu tôi nên sử dụng WCF
- 2. Ở đâu/khi nào chúng tôi sử dụng JSON?
- 3. Khi nào và ở đâu để sử dụng GetType() hoặc typeof()?
- 4. Hibernate và JPA, những gì để sử dụng, ở đâu?
- 5. Khi nào, ở đâu và hàng đợi nên được sử dụng như thế nào?
- 6. Container STL nào để sử dụng?
- 7. sự khác nhau giữa BaseHTTPServer và SimpleHTTPServer là gì? khi nào và ở đâu để sử dụng?
- 8. Rx nên được sử dụng ở đâu?
- 9. Nơi sử dụng ipython và vỏ ipthon ở đâu?
- 10. Tôi sử dụng đại biểu ở đâu?
- 11. Làm cách nào và ở đâu để sử dụng công cụ sửa đổi tĩnh trong Java?
- 12. Twig render vs include - Khi nào và ở đâu để sử dụng cái này hay cái kia?
- 13. readValue và readTree ở Jackson: khi nào nên sử dụng?
- 14. Khớp nối ở đâu/khi nào là descriptionContents() được sử dụng?
- 15. Khi nào và ở đâu để gọi các nhà máy trong thời gian chạy?
- 16. Job.setOutputKeyClass và job.setOutputReduceClass ở đâu?
- 17. Phương thức getView() được sử dụng như thế nào và nó được gọi ở đâu?
- 18. Ứng dụng Keytool ở đâu?
- 19. SMTP dot nhồi .. khi nào và ở đâu để làm điều đó?
- 20. PyBrain: Khi tạo mạng từ mặt đất lên, bạn tạo thiên vị ở đâu và ở đâu?
- 21. Ngôn ngữ python ở đâu được sử dụng
- 22. Tài khoản quản trị viên: Ở đâu, khi nào và như thế nào?
- 23. Làm thế nào để biết được từ khóa AS nên được sử dụng ở đâu?
- 24. Từ khóa tự động C được sử dụng ở đâu?
- 25. Macro Scala, chúng được sử dụng ở đâu?
- 26. Công cụ tạo mã Java được sử dụng ở đâu?
- 27. Mvn.exe ở đâu khi sử dụng nhúng maven 3 trong eclipse indigo?
- 28. Tiêu đề hoặc tên ứng dụng cho sails.js (sử dụng node.js và express.js) ở đâu?
- 29. Khóa cá nhân ở đâu khi sử dụng SSL được lưu trữ?
- 30. MySQL Ở ĐÂU TRÊN()
Tôi chưa bao giờ nghe nói về một sợi dây thừng - nó có tiêu chuẩn không? – CiscoIPPhone
Như @Neil (và những người khác) đã chỉ ra - đây không phải là một phần của tiêu chuẩn mà là một thùng chứa bổ sung là một phần của thư viện SGI. – Konrad
Fancy bạn nói về nó, tôi đã chỉ nghĩ về bản thân mình về con thú tương tự trong khi tự hỏi làm thế nào Python thực hiện 'danh sách' của nó. Tôi nghĩ rằng họ sử dụng một số kỹ thuật tương tự để cho phép chèn/xóa nhanh ở giữa nó. –