Trong std :: string chỉ có các thành viên const để lấy dữ liệu như c_str(). Tuy nhiên tôi có thể nhận được một tham chiếu đến phần tử đầu tiên của chuỗi thông qua operator[]
và tôi có thể viết cho nó.Có hợp pháp để ghi vào std :: string không?
Ví dụ, nếu tôi có chức năng:
void toupper(char *first,char *last_plus_one);
tôi có thể viết trực tiếp vào vector nhận được một con trỏ đến phần tử đầu tiên:
vector<char> message // has "Some Message";
toupper(&message[0],&message[0]+message.size());
Tôi có thể làm điều tương tự với std :: string ?
string message="Some Message";
toupper(&message[0],&message[0]+message.size());
Chuẩn có đảm bảo rằng vị trí của bộ nhớ thực sự tuyến tính không? tức là:
&(*(message.begin()+n)) == &message[n]
Cảm ơn.
Có thể bạn không chỉ đơn giản là templatize chức năng toupper cho phép sử dụng lặp chuỗi thay vì con trỏ? – jalf
Nếu tôi không thể hỏi. Hãy nghĩ rằng tôi có một thư viện lớn thứ 3 có thể hỗ trợ unicode hoặc những thứ khác và api của họ hoạt động với con trỏ. Bởi vì nó chỉ là chi phí để thực hiện điều này như là mẫu. – Artyom
@ jalf: Tôi không có tiêu chuẩn trong tầm tay, nhưng tôi tin rằng std :: to_upper là chính xác những gì bạn đề xuất. –