程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> STL容器之 bitset

STL容器之 bitset

編輯:C++入門知識

1、STL容器
容器是用來保存其它對象的對象。被保存的對象稱為容器的元素。容器一般實現為模板類。

容器為元素分配存儲空間,並提供元素訪問方法。

stack,queue 和 priority_queue被實現為“容器適配器”。容器適配器並不是一個獨立的容器,只是提供特定接口,而其內部使用其它容器來實現。

STL提供了以下容器模板類

1.1、順序容器
vector:向量
deque:雙向隊列
list:鏈表
1.2、容器適配器
stack:棧,先進後出(LIFO)
queue:隊列,先進先出(FIFO)
priority_queue:優先級隊列
1.3、聯合容器
set:集合
multiset:多鍵集合
map:映射
multimap:多鍵映射
bitset:位集
2、bitset
前面總體介紹了一些關於STL容器的知識,下面將對bitset進行詳細介紹。

2.1、頭文件、名字空間和bitset聲明
[cpp] 
#include <bitset> 
 
using std::bitset; 
bitset聲明:
[cpp] 
template < size_t N > class bitset; 
2.2、構造函數
[cpp] view plaincopyprint?
bitset ( ); 
 
bitset ( unsigned long val ); 
 
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); 
bitset<N>::bitset () 實例化一個具有N位的位集,每位均設為0。
bitset<N>::bitset (unsigned long val) 實例化一個具有N位的位集,位集使用無符號長整型val初始化位集。val的低位對應位集的低位。如果N大於val占用的位數,則多出的高位使用0初始化,低位使用val初始化。如果N小於val占用的位數,則使用val的低N位初始化位集。
第三個構造函數使用二進制字符串str初始化位集。開始於str[pos],使用字符串的n位。如果不指定參數n,則使用到字符串尾。值得注意的一點是,字符串的高位初始化位集的低位。如果用於初始化的字符串子串的長度大於位集位數N,則使用字符串子串的低N字節進行初始化。如果用於初始化的字符串子串的長度小於位集位數N,則使用字符串子串初始化位集的低位,超出位數使用0初始化。
示例代碼:

[cpp] 
// 32位機上,sizeof (unsigned long) = 4,即32位 
// 使用無符號整數初始化位集 
unsigned long n = 0xf0f0ff00;  
 
bitset<32> bits1 (n); //位集從高到低:11110000111100001111111100000000 
bitset<16> bits2 (n); //位集從高到低:1111111100000000 
bitset<40> bits3 (n); //位集從高到低:0000000011110000111100001111111100000000 
 
// 使用字符串初始化位集 
string str = "1111111100000000"; 
 
bitset<16> strbits1 (str); //位集從高到低:1111111100000000 
bitset<10> strbits2 (str); //位集從高到低:1111111100 
bitset<20> strbits3 (str); //位集從高到低:00001111111100000000 
 
// 如果使用非二進制串初始化會怎樣? 
bitset<32> bits (-1); // 會把負數轉換為相應的正數來初始化。此處相當於使用0xffffffff初始化。 
 
// 如果使用負整數初始化會怎樣? 
bitset<32> strbits (string("01abc10")); // 運行時報錯 

 

2.3 運算符
[cpp]
bitset<N>& operator&= (const bitset<N>& rhs); 
bitset<N>& operator|= (const bitset<N>& rhs); 
bitset<N>& operator^= (const bitset<N>& rhs); 
bitset<N>& operator<<= (size_t pos); 
bitset<N>& operator>>= (size_t pos); 
bitset<N> operator~() const; 
bitset<N> operator<<(size_t pos) const; 
bitset<N> operator>>(size_t pos) const; 
bool operator== (const bitset<N>& rhs) const; 
bool operator!= (const bitset<N>& rhs) const; 
 
// *** global functions: *** 
template<size_t N> 
  bitset<N> operator& (const bitset<N>& lhs, const bitset<N>& rhs); 
template<size_t N> 
  bitset<N> operator| (const bitset<N>& lhs, const bitset<N>& rhs); 
template<size_t N> 
  bitset<N> operator^ (const bitset<N>& lhs, const bitset<N>& rhs); 
 
// *** iostream global functions (extraction/insertion): *** 
template<class charT, class traits, size_t N> 
  basic_istream<charT, traits>& 
    operator>> (basic_istream<charT,traits>& is, bitset<N>& rhs); 
template<class charT, class traits, size_t N> 
  basic_ostream<charT, traits>& 
    operator<< (basic_ostream<charT,traits>& os, bitset<N>& rhs); 
 
// *** bit access *** 
<pre name="code" class="cpp"><pre>bool operator[] ( size_t pos ) const; 
reference operator[] ( size_t pos ); 

2.4、位操作函數
函數 說明
set () 位集置為全1
set (n) 第n位置為1
reset () 位集置為全0
reset (n) 第n位置為0
flip () 位集翻轉
2.5、位集操作函數
函數 說明
to_string 位集轉換為字符串
to_ulong 位集轉換為無符號整數。如果位集size大於ulong的位數,則捨棄位集高位。
count 返回位集中1的個數
size 返回位集的容量
any 如果位集中有1,則返回true
none 如果位集中沒有1,則返回true
test (n) 如果第n位為1,則返回true

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved