程式設計路上3000問

2021-06-29 07:39:33 字數 3586 閱讀 4190

現在的軟體都非常智慧型,一些格式都會自動填寫。

如: 編寫類的時候,大括號只要按左邊,右邊就會自動出現,並且形成格式,

編寫類的時候,會直接在大括號後加上分號,

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...

關於程式設計之路上的感想

寫在前面 以下純粹是個人所想,在於分享個人的一些工作和生活上的感觸,若你有恰好產生共鳴,那麼非常榮幸。抱著你我就無法碼 碼 我就無法抱著你。物件導向是對世界有乙個清晰的認識和分界。演算法思想就是實現運用簡單的邏輯計算複雜的問題。只要有乙隻手在敲 另乙隻手還可以做很多。作為一名程式設計師,有多大能力就...