1、C++中產生隨機數
需要包含的標頭檔:
#include<cstdlib>
#include<ctime>
設定隨機種子:
srand( time(NULL) );
unsigned int i= rand();
注意:rand()函數產生的隨機數的範圍在0~RAND_MAX之間,RAND_MAX為 0x7fff(32767)
2、當使用sizeof操作符要求數組的大小時,可以直接通過sizeof(數組名)來獲得整個數組的大小,這裡的數組可以是一維數組,也可以是二維數組。
3、在某些搜尋問題中需要使用hash進行狀態判重的時候,
一種方法是可以使用set進行狀態的判重(特別是當狀態可以用string或int等內建類型表示時,當然複雜類型也是可以的,只要定義適當的opertor==重載函數。
另一種方法就是直接寫一個hash,注意hash表的大小要控制好,太小衝突次數多,太大的話同樣會影響效率的。hash函數的設計同樣要注意到實際問題中狀態特點。使用對string求hash值的計算方法其實速度還是挺快的。
4、這裡給出一種選擇hash表prime大小的方法
bool isPrime(unsigned int num)
{
if( 1 == num || num % 2 == 0)
return false;
if( 2 == num || 3 == num){
return true;
}
for(int i=3 ; i*i <= num ; i++){
if( num % i == 0)
return false;
}
return true;
}
unsigned int nextPrime(unsigned int num){
if( num % 2 == 0)
num++;
for( ; ! isPrime(num) ; num++) ;
return num;
}
int main(){
cout<<nextPrime(1<<18)<<endl;
return 0;
}
4、C++中的bitset容器
包含的標頭檔:
#include<bitset>
文法:
bitset(); bitset( unsigned long val ); |
C++ Bitsets能以無參的形式建立,或者提供一個長不帶正負號的整數,它將被轉化為二進位,然後插入到bitset中。當建立bitset時,模板中提供的數字決定bitset有多長。
例子:
bitset<8> a(4);
for(int i=a.size() ; i>=0 ;i--)
cout<<a[i]<<" ";
cout<<endl;
bitset有一個to_string()的成員函數的將二進位形式轉化為字串。
5、關於new操作符
當資料對象是自訂對象時(strut、class),使用new操作符時,系統會自動調用對應的無參數的建構函式對每個記憶體單元進行初始化。
但是如果使用有參數的建構函式,但帶有預設參數時,即使沒有無參的建構函式,也是可以編譯通過的。
而對於C++中的一些內建資料類型,new操作符,在動態申請的時候,不會自動進初始化。
6、對於bool變數,如果對true值取反,結果仍然為true。
因為~true,即~1,而1在電腦中,用補碼錶示,所以結果為負數-2。