Video: TV 33 C++ vector stack & queue 2025
Hình thức phổ biến nhất của mảng C ++ là chuỗi ký tự được kết thúc bằng null được sử dụng để hiển thị văn bản, lợi thế và bất lợi của mảng. Hãy xem xét những điều sau xuất hiện như thế nào:
cout << "this is a string";
Nhưng mọi thứ trở nên chua chát nhanh khi bạn cố gắng thực hiện một thao tác thậm chí đơn giản bằng cách nối hai chuỗi null-terminated:
char * concatCharString (const char * s1, const char * s2) {int length = strlen (s1) + strlen (s2) + 1; char * s = new char [length]; strcpy (s, s1); strcat (s, s2); return s;}
STL cung cấp một chuỗi container để xử lý chuỗi hiển thị. Lớp string cung cấp một số thao tác (bao gồm các toán tử quá tải) để đơn giản hóa việc thao tác các chuỗi ký tự. Cùng một concat () hoạt động có thể được thực hiện như sau bằng cách sử dụng chuỗi đối tượng:
string concat (const string & s1, const string & s2) {return s1 + s2;}Tại cốt lõi của nó, một chuỗi vẫn là một mảng. Các thao tác được cung cấp bởi STL làm cho dễ dàng hơn để thao tác các đối tượng string nhưng không nhanh hơn nhiều. Chèn vào giữa một chuỗi vẫn còn liên quan đến di chuyển nội dung của các mảng xung quanh.
Lớp string thực sự là sự khởi tạo của lớp mẫu basic_class với T set to char . Lớp wstring là một tên khác cho basic_class . Lớp này cung cấp các thao tác ký tự giống nhau được trình bày ở đây cho các chuỗi rộng.
Định nghĩa C ++ '11 thêm u16string và u32string , mở rộng các phương thức thao tác chuỗi sang các chuỗi ký tự UTF-16 và UTF-32. Tất cả các so sánh giữa hai đối tượng chuỗi được thực hiện theo thuật ngữ lexicographically - có nghĩa là, trong đó hai dây sẽ xuất hiện đầu tiên trong từ điển của ngôn ngữ hiện tại.