When thinking about this question I start to wondering if std::copy()
and/or std::fill
are specialized (I really mean optimized) for std::vector<bool>
.
Is this required by C++ standard or, perhaps, it is common approach by C++ std library vendors?
Simple speaking, I wonder to know if the following code:
std::vector<bool> v(10, false);
std::fill(v.begin(), v.end(), true);
is in any way better/different than that:
std::vector<bool> v(10, false);
for (auto it = v.begin(); it != v.end(); ++it) *it = true;
To be very strict - can, let say: std::fill<std::vector<bool>::iterator>()
go into internal representation of std::vector<bool>
and sets their entire bytes instead of single bits? I assume making std::fill
friend of std::vector<bool>
is not a big problem for library vendor?
[UPDATE]
Next related question: can I (or anybody else :) specialize such algorithms for let say std::vector<bool>
, if not already specialized? Is this allowed by C++ standard? I know this will be non portable - but just for one selected std C++ library? Assuming I (or anybody else) find a way to get to std::vector<bool>
private parts.
STD is headers only library and it is shipped with your compiler. You can look into those headers yourself. For GCC's vector<bool>
impelemtation is in stl_bvector.h
. It probably will be the same file for other compilers too. And yes, there is specialized fill
(look near __fill_bvector
).