SGI

bitset<N>

类别:容器 组件类型:类型

描述

位集非常类似于 vector<bool>(也称为 bit_vector):它包含一组位,并提供对每个位的常数时间访问。两者之间有两个主要区别bitsetvector<bool>。首先,一个bitset的大小不能改变bitset的模板参数N,它指定位集中位的数量,必须是一个整数常量。其次,bitset不是一个 序列;事实上,它根本不是 STL 容器。例如,它没有迭代器,也没有begin()end()成员函数。相反,bitset的接口类似于无符号整数。它定义了诸如按位算术运算符&=, |=,以及^=.

通常,位0是最不重要的位,而位N-1是最重要的位。

示例

int main() {
  const bitset<12> mask(2730ul); 
  cout << "mask =      " << mask << endl;

  bitset<12> x;

  cout << "Enter a 12-bit bitset in binary: " << flush;
  if (cin >> x) {
    cout << "x =        " << x << endl;
    cout << "As ulong:  " << x.to_ulong() << endl;
    cout << "And with mask: " << (x & mask) << endl;
    cout << "Or with mask:  " << (x | mask) << endl;
  }
}

定义

在标准头文件 bitset 中定义。

模板参数

参数 描述 默认值
N 类型为size_t的非零常量:位集包含的位数。  

模型

可赋值默认可构造相等可比较

类型要求

N是一个可转换为size_t,以及N的常量整型表达式。是一个正数。

公共基类

无。

成员

成员 定义位置 描述
引用 bitset 充当单个位的引用的代理类。
bitset() 默认可构造 默认构造函数。所有位最初都为零。
bitset(unsigned long val) bitset 从无符号长整数转换。
bitset(const bitset&) 可赋值 复制构造函数。
bitset& operator=(const bitset&) 可赋值 赋值运算符。
template<class Char, class Traits, class Alloc>
explicit
bitset(const basic_string<Char,Traits,Alloc>& s,
       size_t pos = 0,
       size_t n = 
         basic_string<Char,Traits,Alloc>::npos) 
bitset 从字符串转换。
bitset& operator&=(const bitset&) bitset 按位与。
bitset& operator|=(const bitset&) bitset 按位或。
bitset& operator^=(const bitset&) bitset 按位异或。
bitset& operator<<=(size_t) bitset 左移。
bitset& operator>>=(size_t) bitset 右移。
bitset operator<<(size_t n) const bitset 返回一个*this的副本,左移了n位。
bitset operator>>(size_t n) const bitset 返回一个*this右移了n位。
bitset& set() bitset 设置每一位。
bitset& flip() bitset 翻转每一位的值。
bitset operator~() const bitset 返回一个*this,所有位都被翻转。
bitset& reset() bitset 清除每一位。
bitset& set(size_t n, int val = 1) bitset 设置位n如果val非零,则清除位n如果val为零。
bitset& reset(size_t n) bitset 清除位n.
bitset flip(size_t n) bitset 翻转位n.
size_t size() const bitset 返回N.
size_t count() const bitset 返回已设置的位数。
bool any() const bitset 返回true如果任何位被设置。
bool none() const bitset 返回true如果没有任何位被设置。
bool test(size_t n) const bitset 返回true如果位n被设置。
reference operator[](size_t n) bitset 返回一个引用到位n.
bool operator[](size_t n) const bitset 返回true如果位n被设置。
unsigned long to_ulong() const bitset 返回一个unsigned long,对应于*this.
template<class Char, class Traits, class Alloc>
basic_string<Char,Traits,Alloc> to_string() const
bitset 返回*this.
bool operator==(const bitset&) const 相等可比较 相等运算符。
bool operator!=(const bitset&) const 相等可比较 不等运算符。
bitset operator&(const bitset&, const bitset&) bitset 两个位集的按位与。这是一个全局函数,而不是成员函数。
bitset operator|(const bitset&, const bitset&) bitset 两个位集的按位或。这是一个全局函数,而不是成员函数。
bitset operator^(const bitset&, const bitset&) bitset 两个位集的按位异或。这是一个全局函数,而不是成员函数。
template <class Char, class Traits, 
          size_t N>
basic_istream<Char,Traits>&
operator>>(basic_istream<Char,Traits>&, 
           bitset<N>&)
bitset 从输入流中提取一个bitset
template <class Char, class Traits, 
          size_t N>
basic_ostream<Char,Traits>&
operator>>(basic_ostream<Char,Traits>&, 
           const bitset<N>&)
bitset 输出一个bitset到输出流。

新成员

这些成员在 可赋值默认可构造相等可比较 要求中没有定义,但特定于bitset.
成员 描述
引用 充当单个位的引用的代理类。它包含一个赋值运算符,一个转换为bool的转换,一个operator~,以及一个成员函数flip。它仅作为bitsetoperator[]的辅助类存在。也就是说,它支持表达式x = b[i], b[i] = x, b[i] = b[j], x = ~b[i],以及b[i].flip()。(其中b是一个bitsetx是一个bool.)
bitset(unsigned long val) 从无符号长整数转换。构造一个位集,将前min(N, sizeof(unsigned long) * CHAR_BIT)位初始化为val中相应的位,以及所有其他位(如果有)初始化为零。
template<class Char, class Traits, class Alloc>
explicit 
bitset(const basic_string<Char,Traits,Alloc>& s,
       size_t pos = 0,
       size_t n = 
         basic_string<Char,Traits,Alloc>::npos) 
从字符串转换。构造一个位集,将前M位初始化为s中相应的字符,其中M定义为min(N, min(s.size() - pos, n))。请注意,s最高的字符位置(而不是最低的)对应于最低有效位。也就是说,字符位置pos + M - 1 - i对应于位i。因此,例如,bitset(string("1101"))bitset(13ul)相同。此函数抛出out_of_range如果pos > s.size(),以及invalid_argument如果用于初始化位的任何字符不是01.
bitset& operator&=(const bitset&) 按位与。
bitset& operator|=(const bitset&) 按位或。
bitset& operator^=(const bitset&) 按位异或。
bitset& operator<<=(size_t n) 左移,其中位0被认为是最不重要的位。位i取位i - n之前的值,或者如果不存在这样的位则为零。
bitset& operator>>=(size_t n) 右移,其中位0被认为是最不重要的位。位i取位i + n之前的值,或者如果不存在这样的位则为零。
bitset operator<<(size_t n) const 返回一个*this的副本,左移了n位。请注意,表达式b << n等效于构造一个b的临时副本,然后使用operator<<=.
bitset operator>>(size_t n) const 返回一个*this右移了n位。请注意,表达式b >> n等效于构造一个b的临时副本,然后使用operator>>=.
bitset& set() 设置每一位。
bitset& flip() 翻转每一位的值。
bitset operator~() const 返回一个*this,所有位都被翻转。
bitset& reset() 清除每一位。
bitset& set(size_t n, int val = 1) 设置位n如果val非零,则清除位n如果val为零。抛出out_of_range如果n >= N.
bitset& reset(size_t n) 清除位n。抛出out_of_range如果n >= N.
bitset flip(size_t n) 翻转位n。抛出out_of_range如果n >= N.
size_t size() const 返回N.
size_t count() const 返回已设置的位数。
bool any() const 返回true如果任何位被设置。
bool none() const 返回true如果没有任何位被设置。
bool test(size_t n) const 返回true如果位n被设置。抛出out_of_range如果n >= N.
reference operator[](size_t n) 返回一个引用到位n。请注意,引用是一个带有赋值运算符和转换为bool的代理类,它允许您使用operator[]进行赋值。也就是说,您可以同时编写x = b[n]b[n] = x.
bool operator[](size_t n) const 返回true如果位n被设置。
unsigned long to_ulong() const 返回一个unsigned long,对应于*this。抛出overflow_error如果无法将*this表示为unsigned long。(也就是说,如果N大于unsigned long中的位数,并且如果任何高位被设置。
template<class Char, class Traits, class Alloc>
basic_string<Char,Traits,Alloc> to_string() const
返回*this:每个字符是1如果相应的位被设置,则为0如果它没有。通常,字符位置i对应于位位置N - 1 - i。请注意,此成员函数依赖于两个尚未普遍使用的语言特性,即成员模板显式函数模板参数规范;对于不支持这些特性的编译器,此成员函数被禁用。另请注意,调用此成员函数的语法有些繁琐。要将一个位集b转换为普通字符串,您必须编写
b.template to_string<char, char_traits<char>, allocator<char> >()
bitset operator&(const bitset&, const bitset&) 两个位集的按位与。这是一个全局函数,而不是成员函数。请注意,表达式b1 & b2等效于创建b1的一个临时副本,使用operator&=,并返回临时副本。
bitset operator|(const bitset&, const bitset&) 两个位集的按位或。这是一个全局函数,而不是成员函数。请注意,表达式b1 | b2等效于创建b1的一个临时副本,使用operator|=,并返回临时副本。
bitset operator^(const bitset&, const bitset&) 两个位集的按位异或。这是一个全局函数,而不是成员函数。请注意,表达式b1 ^ b2等效于创建b1的一个临时副本,使用operator^=,并返回临时副本。
template <class Char, class Traits, 
          size_t N>
basic_istream<Char, Traits>&
operator>>(basic_istream<Char,Traits>& is, 
           bitset<N>& x)
从输入流中提取一个bitset从输入流中提取。此函数首先跳过空格,然后从输入流中提取最多N个字符。它在成功提取了N个字符,或提取失败,或看到一个不是1的字符(在这种情况下,它不会提取该字符)时停止。然后,它以与初始化bitset的方式相同的方式将值分配给bitset。因此,例如,如果输入流包含字符"1100abc",它将值12ul分配给bitset,并且从输入流读取的下一个字符将是a.
template <class Char, class Traits, 
          size_t N>
basic_ostream<Char,Traits>&
operator>>(basic_ostream<Char,Traits>& os, 
           const bitset<N>& x)
输出一个bitset到输出流。此函数的行为就像将bitset转换为字符串,然后将该字符串写入输出流。也就是说,它等效于
os << x.template to_string<Char,Traits,allocator<Char> >()

注释

另请参阅

vector, bit_vector, string
[Silicon Surf] [STL Home]
版权所有 © 1999 Silicon Graphics, Inc. 保留所有权利。 商标信息