現在的軟體都非常智慧型,一些格式都會自動填寫。
如: 編寫類的時候,大括號只要按左邊,右邊就會自動出現,並且形成格式,
編寫類的時候,會直接在大括號後加上分號,
2014.11.05夜
怎麼進行逐行除錯!!!
f5新增斷點,或者用滑鼠在行號後面單擊就會出現紅點,
f8執行到斷點,
f7進行逐行除錯,直到結束,但是不會顯示返回的0,這個奇怪
2015.3.3夜
加一行,#include ,main函式的末尾,即return 0 的前面加system(「pause」);就可以當暫停用
對於codeblocks,依次settings -> editor -> syntax highlighting 選擇,然後可以改變編輯視窗不同文字的顏色。
2015.3.22夜
新增自己寫的標頭檔案,用「」,新增編譯器的標頭檔案,用< >;
2015.3.23
variably modified array at file scope
const int n=100000;
int array[n];
error: variably modified 『array』 at file scope
解決辦法:#define n 100000 然後:int array[n];即可
對於leetcode的題目,尤其注意各種++、–的使用,注意不同資料型別賦值有區別(如,bool 只能是1或0),運算時注意溢位。
2015.03.30
今天遇到了sizeof()的問題。
之前沒有仔細研究過,潛意識將其與size()函式和length()函式,劃等號。
今天一直沒有檢查出來,經過……然後……最後……終於……解決了。
sizeof()只是返回括號中的型別或物件的大小,而不是具體物件數值的大小。
sizeof(2)==>其實是轉換為sizeof(int)==>然後計算,乙個int大小為4位元組,答案為4.也就是說,不管括號內的具體是什麼,都轉換為計算其型別,只返回型別的大小就行。
2015.4.1
從網上拷貝了乙份比較簡單的**,編譯時遇見以下問題:
test_getopt.c:12:3: error: stray 『\342』 in program
test_getopt.c:12:3: error: stray 『\200』 in program
test_getopt.c:12:3: error: stray 『\230』 in program
test_getopt.c:12:3: error: stray 『\342』 in program
test_getopt.c:12:3: error: stray 『\200』 in program
test_getopt.c:12:3: error: stray 『\231』 in program
test_getopt.c:13:4: error: stray 『\342』 in program
test_getopt.c:13:4: error: stray 『\200』 in program
出現類似以上問題的原因是,源**中存在漢語時的字元或標點符號,特別是空格、括號,引號等不易察覺,如「」、,等,小心將其改過來即可!
2015.5.4
編寫程式,首先想通思路,然後再動手寫**!
特別注意其中變數的定義的位置,選擇區域性變數還是全域性變數?
在迴圈中使用的變數,一定分清變數定義的位置,特別小心,必須清楚,每一次迴圈開始,哪些變數需要重置,哪些變數需要繼續使用上一次的值!
否則,雖然思路對了,但是由於變數定義位置的不當,導致出現邏輯錯誤,難以很快發現!!
切記!2015.5.7
一點教訓:對迭代器進行刪除操作時候,特別注意迭代器的變化,查了一下,發現,迭代器新增、刪除操作會使原來的迭代器失效,下一次遍歷時不能繼續使用,所以,需要特別小心迭代器的更新。
可以將原來的迭代器刪除操作改為:
vector v;
vector::iterator itr;
原來的:v.erase(itr);
改為:itr=v.erase(itr);
原因是:迭代器的erase()函式,返回刪除的迭代器的下乙個迭代器,如此,進行迭代器的更新,解決問題。
vector::iterator b;
int x = 3;
for(b=a.begin();b!=a.end();)
else
} 2015.5.12
忽然發現又到了512這個日子,當年**還記憶猶新,驀然回首,7年過去了……
size_t 型別是非負,所以當不幸其取值為負,則換算成乙個很大的數,因此要小心陷阱!
一般情況下並不會取到負值,但是在迴圈判定的時候,往往在邊界容易發生越界!!還不易檢查!
例如:
for(size_t i=len.
size()-1; i >= 0; --i)
雖然有效的i取值為大於等於0,但是在最後,i=0的時候,先執行迴圈,然後–i,此時i=-1;但是size_t 為非負,i變成乙個很大的數,造成繼續迴圈!!!
應該避免最後那一次的遞減運算!
修改為:
for(size_t i=len; i > 0; --i)
2015.5.14
c++程式除錯時出現「program received signal sigsegv,segmentation fault.」
程式裡執行了無效的記憶體引用。
對於不正確的記憶體處理,電腦程式可能丟擲sigsegv。作業系統可能使用訊號棧向乙個處於自然狀態的應用程式通告錯誤,由此,開發者可以使用它來除錯程式或處理錯誤。
在乙個程式接收到sigsegv時的預設動作是異常終止。這個動作也許會結束程序,但是可能生成乙個核心檔案以幫助除錯,或者執行一些其他特定於某些平台的動作。
一般是程式處理記憶體越界,如迴圈的邊界溢位等。注意檢查邊界!
另,[c/c++] 編譯error: reference to 『searchto』 is ambiguous
編譯報錯資訊。也許是因為一些庫中有名為searchto的函式,與程式中建立的容器例項名稱相同。
糾正方法:給容器例項換乙個名字。
2015.6.3
對於鍊錶,有些時候並沒有單獨的head,而是head指向第乙個元素的指標,因此,遍歷鍊錶時小心!
對於stack,特別注意不能訪問出界!當stack為空的時候,不能訪問stack的top,因為此時stack為空,根本就沒有top,若訪問top,會無意中訪問非法區域!
切記切記!
2015.6.9
對於vector,按照特定的物件進行排序,需要修改sort函式。
定義比較函式:
bool compare(const type1& t1, const type2& t2)
然後這樣使用:
sort (t.begin(), t.end(), compare);
具體應用參見leetcode56題:融合區間。
程式設計路上的坑 7
現象 最近在使用mongo聚合做一次資料查詢分頁,發現有些資料重複的出現。原因分析 每次聚合先排序後查詢,因為排序的資料不具有唯一性,每次排序後在查詢,得到的資料都是隨機的,所以排序加上唯一性後,查詢的資料就是唯一的。解決方案 在排序的時候加上具有唯一性的資料。mongodb 排序 編碼排序時,用了...
機器 深度 學習入門3000問(龜速持續更新)
1.使用python中 os.listdir 發現mac隱藏資料夾.ds store造成的報錯 問 如何 or如何在程式中去除.ds store的影響?參考 2.如何設定終端的初始執行位置?答 1.版本 1.需要配置多種環境麼?答 需要,方便管理需要不同python版本的不同專案。2.jupyter...
關於程式設計之路上的感想
寫在前面 以下純粹是個人所想,在於分享個人的一些工作和生活上的感觸,若你有恰好產生共鳴,那麼非常榮幸。抱著你我就無法碼 碼 我就無法抱著你。物件導向是對世界有乙個清晰的認識和分界。演算法思想就是實現運用簡單的邏輯計算複雜的問題。只要有乙隻手在敲 另乙隻手還可以做很多。作為一名程式設計師,有多大能力就...