Không có lý do gì để mong đợi chức năng chèn của std::string
chậm hơn các chức năng chèn của stringstream
. std::string
nói chung sẽ không có gì hơn là phân bổ/sao chép bộ nhớ có thể cùng với việc sao chép dữ liệu vào bộ nhớ. stringstream
phải xử lý những thứ như ngôn ngữ, v.v., ngay cả đối với các cuộc gọi cơ bản write
.
Ngoài ra, std::string
cung cấp các cách để giảm thiểu hoặc loại bỏ mọi thứ trừ phân bổ bộ nhớ đầu tiên. Nếu bạn reserve
đủ không gian, mỗi lần chèn ít hơn memcpy
. Điều đó không thực sự có thể với stringstream
.
Thậm chí nếu nó nhanh hơn các chức năng phụ của std::string
, bạn vẫn còn có để sao chép chuỗi ra khỏi số stringstream
để làm điều gì đó với nó. Vì vậy, đó là một phân bổ + bản sao khác, mà bạn sẽ không cần với std::string
.
Bạn nên sử dụng std::stringstream
nếu bạn cần định dạng, không chỉ để gắn bó một số chuỗi với nhau.
Nguồn
2013-02-07 00:04:32
So với những gì? '.append()'/'operator + ='? – Rapptz
Tôi nghĩ một .reserve() theo sau là nhiều .append()/+ = nên khá hiệu quả. Các chuỗi không thay đổi trong C++ giống như chúng ở trong Java/C#/etc, vì vậy không có lý do gì để có một lớp kiểu StringBuilder. – Bwmat
@Rapptz Có. 'append()' và 'operator + =' –