Search code examples
c++performancestlbitset

What is the performance of STL bitset::count() method?


I searched around and could not find the performance time specifications for bitset::count(). Does anybody know what it is (O(n) or better) and where to find it?

EDIT By STL I refer only to the Standard Template Library.


Solution

  • I read this file (C:\cygwin\lib\gcc\i686-pc-cygwin\3.4.4\include\c++\bitset) on my computer.
    See these

    /// Returns the number of bits which are set.
    size_t
    count() const { return this->_M_do_count(); }      
    
    size_t
    _M_do_count() const
    {
      size_t __result = 0;
      for (size_t __i = 0; __i < _Nw; __i++)
      __result += __builtin_popcountl(_M_w[__i]);
      return __result;
    }
    

    BTW, this is where _Nw is specified:

      template<size_t _Nw>
        struct _Base_bitset
    

    Thus it's O(n) in gcc implementation. We conclude the specification doesn't require it better than O(n). And nobody in their right mind will implement it in a way worse than that. We can then safely assume that it's at worst O(n). Possibly better but you can never count on that.