《通過遊戲程式設計實戰教新手學C++程式設計》學習筆記
前言:本認為這只是一本教授C++基本語法的小書,仔細翻看過一遍,裡面涵蓋了C++大部分常用的知識,有些程式和建議都非常精妙,貝海拾遺,恐以後忘記,故書寫以記之。
1.rand()函式
下面是隨機產生色子隨機數的例子:
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
srand(static_cast<unsigned int>(time(0)));//為隨機數生成器設定種子
int randomNumber = rand();
int num = (randomNumber % 6) + 1;//die的範圍為1~6
cout << "你搖的色子的數字是:" << num << endl;
return 0;
}
rand函式的使用:rand()在cstdlib標頭檔案中,它生成從0到32767之間的隨機數。具體的上界取決於所使用的C++實現。該上界儲存在cstdlib定義的常量RAND_MAX中。可以把RAND_MAX傳送給cout。
計算機基於數學公式生成的時偽隨機數,而不是真正的隨機數。可以把這想象成讓計算機從一本包含許多數字的書中讀取數字。通過從該書中讀取,計算機可以表現的像是在產生隨機數序列。
但是這樣存在一個問題:計算機總是從書的起始點讀取數字。因此,計算機在程式中總是產生相同的“隨機數序列”。
這個問題的解決方法是:告訴計算機從書的某個任意位置開始讀取數字。該過程成為為隨機數生成器確定種子。程式設計師為隨機數生成器提供一個叫做種子的數來確定偽隨機數序列的起始位置。
下面的程式碼為隨機數生成器確定種子。
srand(static_cast<unsigned int>(time(0)));//為隨機數生成器設定種子
它基於當前日期和事件為生成器確定種子。
srand()函式為生成器確定種子,它接收一個unsigned int型的值作為種子。
2.將字串亂序
法I:對字串取地址
//實現string單詞亂序
for (int i=0; i<length; ++i)
{
int index1 = (rand() % length);//生成隨機值
int index2 = (rand() % length);
char temp = str[index1];
str[index1] = str[index2];
str[index2] = temp;
}
程式生成string物件中的兩個隨機位置,並交換兩個位置的字元。交換操作的次數等於單詞的長度。法II:random_shuffle()
vector<string> words; // collection of possible words to guess
words.push_back("GUESS");
words.push_back("HANGMAN");
words.push_back("DIFFICULT");
srand(static_cast<unsigned int>(time(0)));
random_shuffle(words.begin(), words.end());//shuffle:洗牌,隨手放,搬移
random_shuffle用於打亂向量或字串中的順序。詳細內容參見定義:The function swaps the value of each element with that of some other randomly chosen element. When provided, the function rand chooses which element.
另外,random_shuffle還可以處理其它型別陣列:
int n[4] = {0,1,2,3};
random_shuffle(n, n+4);
3.動態分配記憶體
動態分配記憶體時較好的程式設計方法:
int* pHeap = new int;
*pHeap = 10;
int* pHeap2 = new int[20];
delete pHeap;
delete pHeap2;
pHeap = 0;
pHeap2 = 0;
因為需要釋放掉不再使用的已經分配過的記憶體,所以一個較好的準則但是每個new都應當有一個響應的delete。實際上,有些程式設計師儘可能編寫new語句之後就編寫delete語句,這樣就不會忘記釋放記憶體。
int* pHeap = new int;
*pHeap = 10;
int* pHeap2 = new int[20];
delete pHeap;
delete pHeap2;
重點:上面的兩條語句釋放掉堆中的記憶體,但是他們沒有直接影響到區域性變數pHeap和pHeap2。這造成一個潛在的問題,因為pHeap和pHeap2現在指向已經返回給堆的記憶體,即它們所指向計算機可能在任意某個時刻以某種方式使用的記憶體。像這樣的指標成為野指標,它們相當危險,絕不應當對它們解引用。
一種處理野指標的方法是將它們賦值為0.使得它們不再指向不應當使用的記憶體。
pHeap = 0;
pHeap2 = 0;
如需轉載,請註明出處:http://blog.csdn.net/rehongchen/article/details/8038551
相關文章
- 網路程式設計學習筆記程式設計筆記
- 系統程式設計學習筆記程式設計筆記
- Linux學習/TCP程式設計學習筆記LinuxTCP程式設計筆記
- 四. 文字程式設計--Windows程式設計課程學習筆記程式設計Windows筆記
- 如何教新手程式設計程式設計
- 《高質量C/C++程式設計指南》學習筆記C++程式設計筆記
- shell程式設計,實戰高階進階教學程式設計
- Golang 學習筆記——tun/tap 程式設計Golang筆記程式設計
- 結構化程式設計--學習筆記程式設計筆記
- Javascript高階程式設計 學習筆記JavaScript程式設計筆記
- ROS串列埠程式設計學習筆記ROS串列埠程式設計筆記
- spark學習筆記--進階程式設計Spark筆記程式設計
- Linux Shell 程式設計學習筆記Linux程式設計筆記
- 《Windows 程式設計》學習筆記(五) (轉)Windows程式設計筆記
- 《Windows 程式設計》學習筆記(四) (轉)Windows程式設計筆記
- 《Windows 程式設計》學習筆記(三) (轉)Windows程式設計筆記
- 學習筆記:物件導向程式設計技術(C++版)筆記物件程式設計C++
- 一個C++程式設計師的Delphi學習筆記 (轉)C++程式設計師筆記
- 黑馬程式設計師——Java學習筆記之⑦——“網路程式設計”程式設計師Java筆記
- UI設計新手看過來,UI教程教學UI
- 把學習遊戲化-----遊戲化程式設計學習遊戲程式設計
- Node.js 設計模式 學習筆記 之 流程式設計Node.js設計模式筆記程式設計
- 好程式設計師學習筆記:函式程式設計師筆記函式
- Vue學習筆記(九):元件化程式設計Vue筆記元件化程式設計
- nginx學習筆記(6):程式模型的設計Nginx筆記模型
- Java學習筆記--網路程式設計SocketJava筆記程式設計
- java程式設計師程式設計筆試基礎學習Java程式設計師筆試
- 關於“新手教學”的新手教程(三):教學節奏設計
- 學習記錄|Socket程式設計程式設計
- 適合 C++ 新手學習的開源專案——在 GitHub 學程式設計C++Github程式設計
- 雲端計算學習路線教程程式碼筆記:Shell程式設計筆記程式設計
- 6個程式設計實戰網站,想學程式設計的你不能錯過!程式設計網站
- 程式設計老手的哪些特點,是值得新手程式設計師學習的?程式設計師
- CUDA學習筆記-1: CUDA程式設計概覽筆記程式設計
- python程式設計學習筆記⑦-1函式Python程式設計筆記函式
- shell指令碼程式設計學習筆記-運算子指令碼程式設計筆記
- shell指令碼程式設計學習筆記——變數指令碼程式設計筆記變數
- 程式設計學習筆記之訊息地圖程式設計筆記地圖