19 General utilities library [utilities]
namespace std {
template<size_t N> class bitset {
public:
class reference {
friend class bitset;
reference() noexcept;
public:
reference(const reference&) = default;
~reference();
reference& operator=(bool x) noexcept; reference& operator=(const reference&) noexcept; bool operator~() const noexcept; operator bool() const noexcept; reference& flip() noexcept; };
constexpr bitset() noexcept;
constexpr bitset(unsigned long long val) noexcept;
template<class charT, class traits, class Allocator>
explicit bitset(
const basic_string<charT, traits, Allocator>& str,
typename basic_string<charT, traits, Allocator>::size_type pos = 0,
typename basic_string<charT, traits, Allocator>::size_type n
= basic_string<charT, traits, Allocator>::npos,
charT zero = charT('0'),
charT one = charT('1'));
template<class charT>
explicit bitset(
const charT* str,
typename basic_string<charT>::size_type n = basic_string<charT>::npos,
charT zero = charT('0'),
charT one = charT('1'));
bitset<N>& operator&=(const bitset<N>& rhs) noexcept;
bitset<N>& operator|=(const bitset<N>& rhs) noexcept;
bitset<N>& operator^=(const bitset<N>& rhs) noexcept;
bitset<N>& operator<<=(size_t pos) noexcept;
bitset<N>& operator>>=(size_t pos) noexcept;
bitset<N>& set() noexcept;
bitset<N>& set(size_t pos, bool val = true);
bitset<N>& reset() noexcept;
bitset<N>& reset(size_t pos);
bitset<N> operator~() const noexcept;
bitset<N>& flip() noexcept;
bitset<N>& flip(size_t pos);
constexpr bool operator[](size_t pos) const; reference operator[](size_t pos);
unsigned long to_ulong() const;
unsigned long long to_ullong() const;
template<class charT = char,
class traits = char_traits<charT>,
class Allocator = allocator<charT>>
basic_string<charT, traits, Allocator>
to_string(charT zero = charT('0'), charT one = charT('1')) const;
size_t count() const noexcept;
constexpr size_t size() const noexcept;
bool operator==(const bitset<N>& rhs) const noexcept;
bool operator!=(const bitset<N>& rhs) const noexcept;
bool test(size_t pos) const;
bool all() const noexcept;
bool any() const noexcept;
bool none() const noexcept;
bitset<N> operator<<(size_t pos) const noexcept;
bitset<N> operator>>(size_t pos) const noexcept;
};
template<class T> struct hash;
template<size_t N> struct hash<bitset<N>>;
}
The class template
bitset<N>
describes an object that can store a sequence consisting of a fixed number of
bits,
N.Each bit represents either the value zero (reset) or one (set)
. To
toggle
a bit is to change the value zero to one, or the value one to
zero
. Each bit has a non-negative position
pos. When converting
between an object of class
bitset<N>
and a value of some
integral type, bit position
pos corresponds to the
bit value
1 << pos. The integral value corresponding to two
or more bits is the sum of their bit values
.The functions described in this subclause can report three kinds of
errors, each associated with a distinct exception:
constexpr bitset() noexcept;
Effects:
Constructs an object of class
bitset<N>,
initializing all bits to zero
. constexpr bitset(unsigned long long val) noexcept;
Effects:
Constructs an object of class
bitset<N>,
initializing the first
M bit positions to the corresponding bit
values in
val. If
M < N, the remaining bit positions are initialized to zero
.template<class charT, class traits, class Allocator>
explicit bitset(
const basic_string<charT, traits, Allocator>& str,
typename basic_string<charT, traits, Allocator>::size_type pos = 0,
typename basic_string<charT, traits, Allocator>::size_type n
= basic_string<charT, traits, Allocator>::npos,
charT zero = charT('0'),
charT one = charT('1'));
Throws:
out_of_range
if
pos > str.size()
or
invalid_argument if an invalid character is found (see below)
. Effects:
Determines the effective length
rlen of the initializing string as the smaller of
n and
str.size() - pos. The function then throws
invalid_argument
if any of the
rlen
characters in
str beginning at position
pos is
other than
zero or
one. The function uses
traits::eq()
to compare the character values
.Otherwise, the function constructs an object of class
bitset<N>,
initializing the first
M bit
positions to values determined from the corresponding characters in the string
str. M is the smaller of
N and
rlen. An element of the constructed object has value zero if the
corresponding character in
str, beginning at position
pos, is
zero. Otherwise, the element has the value one
. Character position
pos + M - 1 corresponds to bit position zero
. Subsequent decreasing character positions correspond to increasing bit positions
.If
M < N, remaining bit positions are initialized to zero
.template<class charT>
explicit bitset(
const charT* str,
typename basic_string<charT>::size_type n = basic_string<charT>::npos,
charT zero = charT('0'),
charT one = charT('1'));
Effects: Constructs an object of class
bitset<N> as if by:
bitset(n == basic_string<charT>::npos
? basic_string<charT>(str)
: basic_string<charT>(str, n),
0, n, zero, one)
bitset<N>& operator&=(const bitset<N>& rhs) noexcept;
Effects:
Clears each bit in
*this
for which the corresponding bit in
rhs is clear, and leaves all other bits unchanged
.
bitset<N>& operator|=(const bitset<N>& rhs) noexcept;
Effects:
Sets each bit in
*this
for which the corresponding bit in
rhs is set, and leaves all other bits unchanged
. bitset<N>& operator^=(const bitset<N>& rhs) noexcept;
Effects:
Toggles each bit in
*this
for which the corresponding bit in
rhs is set, and leaves all other bits unchanged
. bitset<N>& operator<<=(size_t pos) noexcept;
Effects:
Replaces each bit at position I in
*this
with a value determined as follows:
bitset<N>& operator>>=(size_t pos) noexcept;
Effects:
Replaces each bit at position I in
*this
with a value determined as follows:
bitset<N>& set() noexcept;
Effects:
Sets all bits in
*this. bitset<N>& set(size_t pos, bool val = true);
Throws:
out_of_range
if
pos does not correspond to a valid bit position
. Effects:
Stores a new value in the bit at position
pos in
*this. If
val is
true, the stored value is one, otherwise it is zero
.bitset<N>& reset() noexcept;
Effects:
Resets all bits in
*this. bitset<N>& reset(size_t pos);
Throws:
out_of_range
if
pos does not correspond to a valid bit position
. Effects:
Resets the bit at position
pos in
*this. bitset<N> operator~() const noexcept;
Effects:
Constructs an object
x of class
bitset<N>
and initializes it with
*this. bitset<N>& flip() noexcept;
Effects:
Toggles all bits in
*this. bitset<N>& flip(size_t pos);
Throws:
out_of_range
if
pos does not correspond to a valid bit position
. Effects:
Toggles the bit at position
pos in
*this. unsigned long to_ulong() const;
Throws:
overflow_error
if the integral value
x corresponding to the bits in
*this
cannot be represented as type
unsigned long. unsigned long long to_ullong() const;
Throws:
overflow_error
if the integral value
x corresponding to the bits in
*this
cannot be represented as type
unsigned long long. template<class charT = char,
class traits = char_traits<charT>,
class Allocator = allocator<charT>>
basic_string<charT, traits, Allocator>
to_string(charT zero = charT('0'), charT one = charT('1')) const;
Effects:
Constructs a string object of the appropriate type
and initializes it to a string of length
N characters
. Each character is determined by the value of its corresponding bit position in
*this. Character position
N - 1 corresponds to bit position zero
. Subsequent decreasing character positions correspond to increasing bit
positions
. Bit value zero becomes the character
zero,
bit value one becomes the character
one.Returns:
The created object
.
size_t count() const noexcept;
Returns:
A count of the number of bits set in
*this. constexpr size_t size() const noexcept;
bool operator==(const bitset<N>& rhs) const noexcept;
Returns:
true if the value of each bit in
*this
equals the value of the corresponding bit in
rhs. bool operator!=(const bitset<N>& rhs) const noexcept;
Returns:
true if
!(*this == rhs). bool test(size_t pos) const;
Throws:
out_of_range
if
pos does not correspond to a valid bit position
. Returns:
true
if the bit at position
pos
in
*this
has the value one
.
bool all() const noexcept;
Returns: count() == size(). bool any() const noexcept;
bool none() const noexcept;
bitset<N> operator<<(size_t pos) const noexcept;
Returns:
bitset<N>(*this) <<= pos. bitset<N> operator>>(size_t pos) const noexcept;
Returns:
bitset<N>(*this) >>= pos. constexpr bool operator[](size_t pos) const;
Requires:
pos shall be valid
. Returns:
true if the bit at position
pos in
*this has the value
one, otherwise
false. bitset<N>::reference operator[](size_t pos);
Requires:
pos shall be valid
. Returns:
An object of type
bitset<N>::reference
such that
(*this)[pos] == this->test(pos),
and such that
(*this)[pos] = val
is equivalent to
this->set(pos, val). Remarks: For the purpose of determining the presence of a
data race, any access or update through the resulting
reference potentially accesses or modifies, respectively, the entire
underlying bitset
.