Greetings, > On Sun, 20 Jan 2002, Elie Rosenblum wrote: > You can ignore std::vector<bool>. It's ugly, stupid, and on the chopping > block for C++0x. A specialization of a container that is not, itself, a > container is confusing and broken. std::vector<bool> _looks_ like a > container, but cannot be used like one. std::vector<bool> is not deprecated, nor is it on the way out, nor is it a container, std::vector is. std::vector is an implementation of a dynamically resizing array and as such using booleans as the type stored in the container would waste 7 bits since the smallest addressable pointer-unit is a byte (on some architectures even more). std::vector<bool> is a specialisation of a container to optimise the usage since a boolean really only requires one bit. Now, the benefit of std::vector<bool> over std::bitset<size> is that the vector is resizable during run-time. That means if you like some people have a dynamic system for classes and/or races where you can add/remove classes and/or races at run-time the std::vector<bool> makes a lot of sense to determine weather some pieces of equipment is usable by this class/race. std::vector<bool> can be used like any other template container with random access iterators, which merely stores booleans in an effective manner. For standard CircleMUD usage, however, std::vector<bool> warrants no attention, but it is, like the rest of the standard library, good to know if you are working with C++. > std::bitset<N> merits a bit more attention (no pun intended). It can be > used as a drop-in replacement for bitvector_t if desired: [snip] For any "normal" bitvector business where you know how many elements you need to control in your bitvector, std::bitset is by far preferable, and works rather well. The declaration of the elements should be something like: #define AFF_ELEM1 0 #define AFF_ELEM2 1 ... #define NUM_AFFECTS 37 or the equivalent enum: enum Affects { AFF_ELEM1 = 0, AFF_ELEM2, ... NUM_AFFECTS // must always be last }; [snip] >> Having looked at the code for the template, it's rather useful >> generally but I would end up gutting it anyway just to get an >> optimized version. > To be honest, the standard STL implementation of std::bitset<N> is > considerably better optimized than your bitvect class. Almost no matter what you do your STL container is better implemented than what you are doing (except if you choose a poorly written version of the template library, obviously). :o) -- Yours truly, Henrik Stuart (http://www.unprompted.com/hstuart/) -- +---------------------------------------------------------------+ | FAQ: http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html | | Archives: http://post.queensu.ca/listserv/wwwarch/circle.html | | Newbie List: http://groups.yahoo.com/group/circle-newbies/ | +---------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 06/25/03 PDT