Một lựa chọn tốt phụ thuộc vào cách bạn sẽ sử dụng các bit.
std::bitset<N>
có kích thước cố định. Visual C++ 10.0 là wrt không phù hợp. để xây dựng; nói chung bạn phải cung cấp một cách giải quyết. Điều này, trớ trêu thay, do những gì Microsoft nghĩ là một sửa lỗi - họ đã giới thiệu một nhà xây dựng tham số int
, như tôi nhớ lại.
std::vector<bool>
được tối ưu hóa theo cùng một cách như std::bitset
. Chi phí: lập chỉ mục không trực tiếp cung cấp tham chiếu (không có tham chiếu đến từng bit riêng lẻ trong C++), nhưng thay vào đó trả về đối tượng proxy - không phải là thông báo cho đến khi bạn cố gắng sử dụng nó làm tham chiếu. Ưu điểm: lưu trữ tối thiểu, và vector có thể được thay đổi kích thước theo yêu cầu.
Chỉ cần sử dụng ví dụ: unsigned
cũng là một tùy chọn, nếu bạn đang đi để đối phó với một số lượng nhỏ bit (trong thực tế, 32 hoặc ít hơn, mặc dù bảo lãnh chính thức chỉ là 16 bit).
Cuối cùng, TẤT CẢ các định danh UPPERCASE là theo quy ước (ngoại trừ Microsoft) dành riêng cho các macro, để giảm khả năng xảy ra xung đột tên. Do đó, tốt nhất là không nên sử dụng TẤT CẢ định danh TẤT CẢ cho bất kỳ điều gì khác ngoài macro. Và luôn sử dụng TẤT CẢ định danh TẤT CẢ UPPERCASE cho macro (điều này cũng giúp dễ dàng nhận ra chúng hơn).
Cheers & h.,
Nguồn
2010-10-22 15:29:28
Để trích dẫn trang cplusplus.com về bitset, "Lớp này rất giống với một mảng bình thường, nhưng tối ưu hóa cho việc phân bổ không gian". Nếu int của bạn là 4 byte, một bitet sử dụng ít hơn 32 lần không gian. – AlcubierreDrive
Cấu trúc của bạn 'BIT' sẽ được căn chỉnh sao cho (ít nhất) một byte. – Archie
@Jon, đăng câu trả lời đó. (Đó là một điểm tốt.) –