1. 程式人生 > >編程中的一些註意點匯總

編程中的一些註意點匯總

博文 ref code red 有關 gets 大量 int 測試

目錄

  • while控制數據的接收
  • scanf的妙用
  • 全局變量
  • 哈希表
  • 優先隊列實現大頂堆和小頂堆
  • vector容器中沒有find函數

因為時間問題,暫時只做簡單記錄,有時間的話部分內容將寫具體的博文詳細分析。


while控制數據的接收

while(scanf(%d, &a)!=EOF)

不斷輸入測試數據,直到遇見結束符(ctrl + z),類似的還有while(gets(str))等

scanf的妙用

scanf("%4d%2d%2d", &y, &m, &d);

輸入年月日 自動復制 如19970103

全局變量

如果需要開辟大量的內存空間,必須定義為全局變量,或者使用malloc動態申請變量空間/

比如說需要定義一個大數組,如果直接在main中定義,那麽函數所使用的棧空間將不足以提供如此龐大的內存,會出現棧溢出,導致程序異常終止。

哈希表

當鍵都是普通的正整數時,可以使用數組來構建哈希表;

也可以使用map/unordered_map來構建。

優先隊列實現大頂堆和小頂堆

優先隊列實現大頂堆:

priority_queue<int> Q;

實現小頂堆

priority_queue<int, vector<int>, greater<int>> Q;

對堆的有關操作:

Q.push(x);// 將元素x放入堆Q中
int a = Q.top();// 將堆頂元素的值賦值給a,但是不彈出堆頂元素
Q.pop();// 彈出堆頂元素,取出後會自動調整為一個新的小頂堆or大頂堆

vector容器中沒有find函數

vector<int> v;
v.find();//註意!!!!不能這樣用find!!
find(v.begin(), v.end(), 2);// 這樣才是正確的

編程中的一些註意點匯總