namespace std {
template<size_t N> class bitset {
public:
class reference {
friend class bitset;
reference() noexcept;
public:
~reference() noexcept;
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>>;
}
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. M is the smaller of
N and the number of bits in the value
representation (
[basic.types]) of
unsigned long long. 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 nonzero, 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 (
[intro.multithread]), any access or update through the resulting
reference potentially accesses or modifies, respectively, the entire
underlying bitset
.