vectơ của char rất đẹp vì bộ nhớ là tiếp giáp. Vì vậy, bạn có thể sử dụng nó với rất nhiều API của C như các ổ cắm berkley hoặc các API tệp. Bạn có thể làm như sau, ví dụ:
std::vector<char> vect;
...
send(sock, &vect[0], vect.size());
và nó sẽ hoạt động tốt.
Về cơ bản, bạn có thể xử lý nó giống như bất kỳ bộ đệm char được cấp động nào khác. Bạn có thể quét lên và xuống tìm kiếm số ma thuật hoặc patters. Bạn có thể phân tích cú pháp một phần tại chỗ. Để nhận được từ một ổ cắm, bạn có thể dễ dàng thay đổi kích thước để gắn thêm dữ liệu.
Nhược điểm là thay đổi kích thước không hiệu quả khủng khiếp (thay đổi kích thước hoặc preallocate thận trọng) và xóa từ phía trước của mảng cũng sẽ rất không hiệu quả. Nếu bạn cần, nói, pop chỉ một hoặc hai ký tự tại một thời điểm ra phía trước của cấu trúc dữ liệu rất thường xuyên, sao chép vào một deque trước khi xử lý này có thể là một lựa chọn. Chi phí này cho bạn một bản sao và bộ nhớ deque không phải là tiếp giáp, vì vậy bạn không thể chỉ cần vượt qua một con trỏ đến một API C.
Tóm lại, tìm hiểu về cấu trúc dữ liệu và sự cân bằng của chúng trước khi lặn, tuy nhiên vector của char thường là những gì tôi thấy được sử dụng trong thực tiễn chung.
Nguồn
2009-01-13 23:02:39
câu trả lời hay. cho phần học tập: tôi tìm thấy một hình ảnh đẹp cho thấy việc sử dụng các thùng chứa một số thời gian trước đây, và nhúng nó vào câu trả lời này: http://stackoverflow.com/questions/366432/extending-stdlist#366710 –