Trong C++98
và C++03
std::string
có thể đã lưu trữ dữ liệu nằm trong bộ nhớ không tiếp giáp. Lý do cho việc này là gì? Điều gì có thể tối ưu hóa có thể đạt được bằng yêu cầu thoải mái này? Đã làm bất kỳ trình biên dịch/kiến trúc thực sự làm cho việc sử dụng này?Lợi ích của std :: chuỗi không lưu trữ dữ liệu ở vị trí bộ nhớ liền kề (trước C++ 11)
Nếu bạn có các phần của chuỗi được lưu trữ ở các vị trí bộ nhớ khác nhau, thì trình vòng lặp có quá phức tạp không? Và cả lớp nữa, vì nó sẽ cần phải biết chính xác vị trí của các phần khác nhau của chuỗi.
Không có lý do gì khiến trình vòng lặp quá phức tạp. Nó có thể được thực hiện như 'cặp', với 'toán tử *' lập chỉ mục chuỗi, 'toán tử ++' tăng chỉ mục, và cứ thế. Tất nhiên, lớp học sẽ phải biết các phần khác nhau ở đâu, nhưng điều đó có thể rất hiệu quả nếu được lưu trữ trong một cây cân bằng. Xem [dây] (https://en.wikipedia.org/wiki/Rope_ (data_structure)). –
user4815162342
Đây là một chuyên gia/con khác cho việc thực hiện dây (mà - như tôi hiểu - tiêu chuẩn có trong tâm trí như một cái gì đó mà có thể được): http://www.sgi.com/tech/stl/Rope.html – peterchen