1. 程式人生 > >C++標準庫型別 bitset及其應用

C++標準庫型別 bitset及其應用

        bitset 物件用每一個bit位儲存0或1,可以用來標記存在或者不存在,位置下標和儲存內容組成一個key-value對。用bit標記的好處就是可以節省記憶體空間,特別是應用於海量資料處理中。

        例如以下幾個問題:(1) 已知某個檔案內包含一些電話號碼,每個號碼為8位數字,統計不同號碼的個數 ;(2) 2.5億個整數中找出不重複的整數的個數,記憶體空間不足以容納這2.5億個整數;(3) 某人有8角的郵票5張,1元的郵票4張,1元8角的郵票6張,用這些郵票中的一張或若干張可以得到多少種不同的郵資?

        以上3個問題的共同點都可以歸結為:在一大堆數中找出不重複的個數——去重複問題

。對於問題(3),在6*5*7個整數中去重複,我們可以用char陣列或int陣列存取,記憶體的節省不是那麼明顯;但對於(1)和(2),就很有必要採用bieset類庫了。(1)中:8位最大為99 999 999,如果用每一個bit表示一個號碼是否存在,假如每個號碼平均出現1次,理論上只需要100M個bit(12.5MB)的記憶體。

問題(3)的源程式:

#include<iostream>
#include<bitset>  // bitset類庫宣告
using namespace std;

int main()
{
	const unsigned int a = 189; // 最大郵資188角
	bitset<a> bitvec; // 生成bitset物件

	int x = 0, y = 0, z = 0;
	for (x = 0; x <= 5; ++x){
		for (y = 0; y <= 4; ++y){
			for (z = 0; z <= 6; ++z){
				bitvec[8 * x + 10 * y + 18 * z] = 1;
			}
		}
	}

	int count = 0;
	for (x = 0; x<a; ++x)
	if (bitvec[x])
		count++;
	cout << "共有: " << count
		 << " 種郵資組合" << endl;

	return 0;
}

參考連結:

http://blog.csdn.net/yushuai007008/article/details/7466945

http://dongxicheng.org/structure/bitmap/

http://www.cplusplus.com/reference/bitset/bitset/


相關推薦

C++標準型別 bitset及其應用

        bitset 物件用每一個bit位儲存0或1,可以用來標記存在或者不存在,位置下標和儲存內容組成一個key-value對。用bit標記的好處就是可以節省記憶體空間,特別是應用於海量資料處理中。         例如以下幾個問題:(1) 已知某個檔案內包含一些

C++標準bitset型別

雖然在C++的基本型別中,似乎沒有二進位制這個重要的型別,但是在C++標準庫中卻提供了能夠處理二進位制位的有序集合型別,這就是bitset型別,使用該型別時需要先包含該標頭檔案並進行宣告: #include <bitset> using namespace st

C++標準型別-string

1:首先區分開C和C++中的string 解釋:C語言中的並沒有string型別(C語言連類都沒,當然沒有string),C中的有個string.h標頭檔案,這個標頭檔案只是包含對字串的處理,比如說strcat等函式。而C++中的string是一個標準庫型別,表示可變長的字元序列,而由於是標準庫

標準型別bitset型別

//標準庫bitset型別 //bitset標頭檔案:#include<bitset> //bitset的定義:bitset<位數> 變數名; //bitset的初始化方式: //bitset<n> b; b有n位,每位都為

C++標準bitset型別

    bitset用於處理二進位制位集。是一種類模板。 #include<bitset> using std::bitsset 1. 定義和初始化       在定義bitset時,要明確bitset是多少位,須在尖括號中制定它的長度值。 bitset<

C++ Primer】【學習筆記】【第三章】標準型別之:bitset型別

#include <iostream> #include <bitset> using namespace std; int main() { bitset<32> bitvec; int a = 0, b = 1; i

《隨筆十八》—— C++中的 “ 標準型別string ”

  目錄 初始化 string 物件的方式 string 物件的操作 cin 和 getline  讀寫 string物件 string 的 size ()操作 和  string::size_type 型別 比較string物件

C++primer筆記-第3章 字串、變數和陣列(標準型別string)

 標準庫string、vector都是對內建陣列型別的抽象,string支援變長的字串,vector表示可變長的集合。迭代器是string和vector的配套型別,常用於訪問string或者vector中的元素。 string作為標準庫的一部分,定義在名稱空間s

C++ primer讀書筆記 chapter3 標準型別

除第二章介紹的是C++的基本型別,本章將大致介紹一下C++定義的內容豐富的抽象資料庫型別標準庫。著重介紹一下sting、vector和bitset。 3.2標準庫string型別   1.string型別支援幾個建構函式。建構函式是一個特殊成員函式,定義如何初始化該型別的物件,以下是stri

C++ primer筆記 -標準型別

最重要的兩個標準庫型別:string和vector string 型別的輸入操作符: 1、讀取並忽略開頭所有的空白符 2、讀取字元直至再次遇到空白字元,讀取終止 string物件的基本操作: string s; s.empty()    如果為空返回true,不為空返回fals

C++ 標準 string型別(二)

C++ 標準庫 string型別(一) 一,string物件的操作 1,s.size() s.size()是描述string字元多少的,如下: #include<iostream> #i

C++ 標準 vector型別

C++ 標準庫 vector 型別 1,vector物件的定義和初始化 vector是一個類似於動態陣列的型別,對於vector的初始化,如下: vector<int> v1;//儲存in

C++ Primer 【第四版】第三章 標準型別

預設建構函式(default constructor)就是在沒有顯式提供初始化式時呼叫的建構函式。它由不帶引數的建構函式,或者為所有形參提供預設實參的建構函式定義。如果定義某個類的變數時沒有提供初始化式,就會使用預設建構函式。如果使用者定義的類中沒有顯式定義任何建構函式,編譯器就會自動為該類生成預設建構函式,

C++ Primer 4 第三章 標準型別

  1. 名稱空間的 using 宣告          使用 using 宣告可以在不需要加字首 namespace_name:: 的情況下訪問名稱空間中的名字。using 宣告的形式如下:      using namespace::name;          一個

Bit操作 和C++標準BitSet

關於 C實現資料的Bit 操作和C++ 標準庫 BitSet累的比較總結。 1,設定某位為1   unsigned char num = 10;  // 1010 bit: from right to left  const size_t pos = 2;  nu

c++ primer第三章(標準型別)學習筆記

1.在使用標準庫提供的string物件的size方法獲取字串長度時,為了避免溢位,儲存一個string對像size的最安全方法就是    使用標準庫型別string::size_type,處於同樣的道理在定義索引變數時也要使用string::size_type。 2.stri

c++之標準型別string

標準庫型別string 表示可變長的字元序列,使用string型別必須首先包含string標頭檔案。 #include <string> using namesapce std; 讀取未知數量的物件 int main() {

c++基礎五---標準型別(string ,vector)

string型別 支援長度可變的字串 因為歷史原因以及為了與C語言相容,字串字面值與標準庫string型別不是同一種類型。這一點很容易引起混亂。 s.empty ()    如果s為空串,則返回ture s.size() s[n]    返回s中位置為n的字元 size(

c++_標準型別string

一  標準庫型別 string 是可變長的字元序列,使用string型別需要: #include<string> using namespace std;  or   using std::string; 二 定義與初始化             直接初始化

C++ Primer 第三章 標準型別 筆記

C++ Primer 第三章 標準庫型別 標準庫型別是我之前沒有接觸過內容,不僅是這一章,整本書有很多東西對我來說都是新的,譚伯伯那本介紹的東西只是C++中的皮毛罷了。感覺到學習C++將是個無底洞。