sally0909/Llama3_Dataset huggingface dataset:
題目: 作業二靜態陣列和動態陣列有何差異？指出其優缺點。
答案: 靜態陣列 : 長度固定， 優點 :  不需額外連結欄位，較省記憶體    缺點 : 陣列長度無法更改，插入元素較麻煩  動態陣列 : 長度可改變， 優點 : 可以改變陣列長度，中間插入元素相比靜態陣列方便 缺點 :   每筆資料需額外連接，較浪費記憶體
評論: 👍 條列方便對比。 👍 good
題目: 作業二靜態陣列和動態陣列有何差異？指出其優缺點。
答案: 靜態陣列:在stack上儲存 優點:固定大小，儲存空間由編譯器決定，用完系統會釋放記憶體不占空間。 缺點:資料增減不便。  動態陣列:在heap上儲存 優點:大小可改變，有效利用儲存空間。 缺點:使用完要手動釋放，可能造成記憶體洩漏。
評論: 有效裡用儲存空間  錯字！ 讚 👍 👍
題目: 遞迴呼叫為何會造成記憶體區段錯誤？
答案: 當呼叫stack過大，遞迴呼叫會造成記憶體區段錯誤
評論: 呼叫stack 是指什麼？請詳述！ 可惜點讚數和回應數都偏低。
題目: 遞迴呼叫為何會造成記憶體區段錯誤？
答案: 在一個程式開始時或是一個線程建立時， 會事先占用一個固定大小(大小取決於編譯器設定)的記憶體空間用來存放呼叫堆疊。  函數呼叫時，會把上一層的函數(呼叫此函數的函數)所使用的子堆疊基底位置放入上一層函數的子堆疊中， 以及放入函數呼叫結束後下一個執行指令的位置， 然後才會在呼叫堆疊上放入一個子堆疊(這個子堆疊是疊在上一層函數的子堆疊上面) 接著把靜態變數放入子堆疊中。 同時為了防止這個函數執行完後改變上一個函數呼叫前的暫存器數值，導致運算錯誤， 所以這個子堆疊也會放入會在這個函數用到的暫存器原本的數值，在函數執行完後再把它押出並放回原位， 所以此時的呼叫堆疊大概會長這樣(視編譯器而定，但大致上應該是長這樣)    在函數執行結束後，這個子堆疊才會從呼叫堆疊中押出。  而在遞迴的時候，如果遞迴時不斷在呼叫堆疊上放入東西 導致最後呼叫堆疊沒有空間放入新的子堆疊時，便會導致下一個函數無法順利執行， 此時便會發生Stack Overflow.
評論: Excellent!  Add a citation if the text or figures were borrowed from others. 👍
題目: 遞迴呼叫為何會造成記憶體區段錯誤？
答案: 1.遞迴呼叫階層數太多  or  2.遞迴未正確設定終止條件  or  3.遞迴未如預期達到終止條件  then  -> Stack Overflow ->試圖存取 無權限/不合法/不存在 的記憶體區段 ->Memory Segment Fault
評論: Great!
題目: 如何幫陣列元素設定非零的初始值？須寫出C++程式碼。
答案: #include <bits/stdc++.h> using namespace std;  int main() {     int arr[]={100,2,3,4};     for(auto i=arr;i<arr+(sizeof(arr)/sizeof(int));i++)         cout<<*i<<   ; }  另一種寫法  #include <bits/stdc++.h> using namespace std;   int main() {     array<int,4> arr({100,2,3,4});     for(auto i:arr)         cout<<i<<   ; }
評論: 讚 Nice.  Ref. https://en.cppreference.com/w/cpp/language/array 讚 讚
題目: 若遞迴到某層就異常終止，要如何強制它繼續執行到下一層？
答案: 通常是不太會讓異常的程式繼續執行 不過因為這題是要強制執行 在下因為開發經驗稍微弱了一點 絞盡了腦汁想 只想到一種方法 (抱歉我開發經驗稍微不足):  Exception Handling 基本上這個東西在很多程式語言都有  使用方式: 用 try 包住可能會發生例外的程式碼區段， 用 catch 來處理這個 try 區域所發生的例外 如果執行中發生Exception 不會直接將程式中止 而是會進入catch那邊  以下是會發生錯誤的程式碼  #include<bits/stdc++.h> // 對不起啦QAQ using namespace std; // 我很抱歉QQ void A(){     cin.exceptions(ios_base::failbit);      try{         int t;          cin >> t; // 輸入t         cout << t << endl; // 輸出t         A(); // 遞迴進下一層     }     // 當發生錯誤時     catch (exception& ba){         printf( Error\n ); // 印出Error         cin.clear(); // 先把cin清空         cin.ignore();          A(); // 再遞迴XD     }  } int main(){     A(); // infinite loop }  (如果是指stack overflow還繼續執行的話 很抱歉我沒找到方法XD)  (參考資源: https://shengyu7697.github.io/cpp-exception/ https://cplusplus.com/reference/ios/ios/exceptions/ https://learn.microsoft.com/zh-tw/cpp/cpp/errors-and-exception-handling-modern-cpp?view=msvc-170 )
評論: 這個做法其實很不錯，可惜無法應付stack overflow的限制。  若非增加堆疊大小的設定，可能要先一路退出遞迴，並將最後一層必要的區域變數值傳回，再重啟遞迴。 👍 👍 👍
題目: 如何幫陣列元素設定非零的初始值？須寫出C++程式碼。
答案: #include<iostream>  using namespace std;  int main() {      char anArray[5] = { 'H', 'e', 'l', 'l', 'o' };      int num[5] = { 1, 2, 3, 4, 5 };      for( int i = 0 ; i < 5 ; i++ ) {          cout << anArray[i] <<   :   << num[i];      } // for  } // main()
評論: No explanation, no point! 👍
題目: 如何幫陣列元素設定非零的初始值？須寫出C++程式碼。
答案: #include <iostream> using namespace std;  int main() {     // 多維陣列除了第一個以外，其餘都必須指定，否則會拋出錯誤(以arr2為例)          int arr1[][4] = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 } };     int arr2[][][] = { { { 1, 2, 3, 4 } } };          cout <<  arr1 :\n ; // 印出arr1     for ( auto &a: arr1 ) {         cout <<  {  ;         for ( auto &b: a ) cout << b <<    ;         cout <<  }\n ;     } // foreach          // error: declaration of ‘arr2’ as multidimensional array must have bounds for all dimensions except the first          // 一維陣列初始值為不同非零整數     int arr3[] = { 1, 2, 3, 4 }; // 第一種作法     int arr4[4] = { [0] = 1, [1] = 2, [2] = 3, [3] = 4 }; // 第二種作法     int arr5[4] = { 1, 2, 3, 4 }; // 第三種作法          cout <<  arr3 :\n ; // 印出arr3     cout <<  {  ;     for ( auto &c: arr3 ) cout << c <<    ;     cout <<  }\n ;          cout <<  arr4 :\n ; // 印出arr4     cout <<  {  ;     for ( auto &d: arr4 ) cout << d <<    ;     cout <<  }\n ;          cout <<  arr5 :\n ; // 印出arr5     cout <<  {  ;     for ( auto &e: arr5 ) cout << e <<    ;     cout <<  }\n ;          // 一維陣列初始值為同一非零整數     int arr6[] = { 1, 1, 1, 1 }; // 其實就是把arr3、arr4、arr5的所有值設為同一個，就不印出贅述了     int arr7[] = { [0 ... 3] = 1 }; // 特殊寫法，僅限GCC編譯器               cout << endl;     return 0; } // main()  參照：  https://www.geeksforgeeks.org/different-ways-to-initialize-all-members-of-an-array-to-the-same-value-in-c/  https://stackoverflow.com/questions/12990568/passing-2-d-array-as-argument  http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Designated-Inits.html  https://stackoverflow.com/questions/201101/how-to-initialize-all-members-of-an-array-to-the-same-value  https://coherence0815.wordpress.com/2016/07/11/initialize-an-array-in-cc/
評論: Excellent! 👍
題目: 如何幫陣列元素設定非零的初始值？須寫出C++程式碼。
答案: #include <iostream>  using namespace std;  int main() {     int arr1[5] = {0, 1, 2, 3, 4}; // 指定陣列長度      int arr2[] = {0, 1, 2, 3, 4}; // 不指定陣列長度 有初值個數決定陣列長度  }
評論: 👍 讚 推 👍
題目: 遞迴呼叫為何會造成記憶體區段錯誤？
答案: 在執行遞迴時，尚未被完成的function會被暫放在記憶體中的stack區等待處理。  然而若是出現以下任一情形 :   	傳入資料過多 	遞迴為無窮遞迴，無法終止(它就會狂呼叫自己 產生一堆function占用stack空間)   就很可能造成stack overflow(堆疊溢位)，而stack overflow則是此情況中導致記憶體區段錯誤的原因。
評論: OK. 讚 很好很好
題目: 作業二靜態陣列和動態陣列有何差異？指出其優缺點。
答案: 靜態陣列：大小在定義時就固定   優點：在函式執行完後系統會自動銷毀    缺點：大小固定，無法依照不同需求增減  動態陣酬：大小可在執行時指定   優點：可以需求產生不同大小之陣列       缺點：在使用完後需delete掉，不然可能會造成記憶體洩漏
評論: 大小文陣列  typo error 👍 👍👍 👍
題目: 遞迴呼叫為何會造成記憶體區段錯誤？
答案: 遞迴呼叫的次數太多容易造成記憶體錯亂，可能是因為沒達到終止條件而形成無窮遞迴，造成堆疊溢位。
評論: 請敘述造成堆疊溢位的過程。
題目: 作業二靜態陣列和動態陣列有何差異？指出其優缺點。
答案: 靜態陣列：在宣告陣列時，已經決定了此陣列的尺寸  優點：可節省記憶體空間，用完後不需另外刪除  缺點：在執行程式中無法任意更動此陣列的大小  動態陣列：在執行程式時，仍然能夠更動陣列的尺寸  優點：可以有效利用儲存空間，插入其他陣列時，會比較輕鬆  缺點：每一次的資料要額外連接，用完資料後要另外做刪除動作
評論: 讚
題目: 作業二靜態陣列和動態陣列有何差異？指出其優缺點。
答案: 靜態陣列的大小為固定的。優點是記憶體在使用結束後由計算機自動釋放，效率高且不佔記憶體空間。缺點為陣列不可改變大小。  動態陣列的大小可改變。優點是可以根據使用者需要，有效利用儲存空間。缺點是不使用的時候必須釋放空間，否則會造成記憶體洩漏。
評論: 👍 說的真好 👍
題目: 作業二靜態陣列和動態陣列有何差異？指出其優缺點。
答案: 比較差異 			優點 			          缺點 		 		 			靜態陣列 			在宣告時已經確定陣列大小的陣列 (從棧中分配空間) 			 記憶體在使用結束後由計算機自動釋放，效率較高 			自由度小 		 		 			動態陣列  			在宣告時沒有確定陣列大小的陣列 (從堆中分配空間) 			自由度大 			使用結束後由程式設計師進行釋放，效率較低
評論: 讚 利用表格詳細介紹兩者優缺點 推 a concise view to compare them.
題目: 作業二靜態陣列和動態陣列有何差異？指出其優缺點。
答案: < 靜態陣列 > 1.宣告時已確定能儲存的空間大小不能更動 2.從棧中分配空間 3.記憶體使用結束後會自動釋放  < 動態陣列 > 1.宣告時無須確定能儲存空間大小，可依據不同條件等有所增減元素，自由度大 2.從堆中分配空間 3.記憶體不使用時須自行釋放空間
評論: 👍🏻 讚 👍🏻
題目: 作業二靜態陣列和動態陣列有何差異？指出其優缺點。
答案: 動態陣列:    	宣告時沒有確定陣列大小 	可在執行時重新指出陣列的大小 	使用時分配記憶體空間給它，不使用時釋放掉   *優點: 可根據使用者需要，有效利用儲存空間  *缺點: 使用結束後需自行釋放，效率較差  靜態陣列:    	宣告時需確定陣列長度 	後續使用不能修改其大小   *優點: 使用結束自行釋放  *缺點: 可能造成陣列資源浪費，未做最妥善的分配
評論: 👍 👍 讚喔 good 讚 good
題目: 作業二靜態陣列和動態陣列有何差異？指出其優缺點。
答案: 靜態陣列      優點->程式結束後自動釋放記憶體空間      缺點->陣列長度固定，無法更動  動態陣列      優點->不必預先知道資料長度，在程式中可自由修改陣列長度      缺點->  記憶體的釋放需要靠工程師完成
評論: 👍🏻 👍 good good
題目: 如何幫陣列元素設定非零的初始值？須寫出C++程式碼。
答案: #include <iostream>  using namespace std;  int main(){       int array[5] = {1,2,3,4,5}; // 直接指定陣列長度        int array2[] = {1,2,3,4,5,6}; // 由初始值個數決定陣列長度    } //main
評論: 天啊 很會欸 👍🏻👍🏻👍🏻 讚 good! 也說得太好了吧
題目: 如何幫陣列元素設定非零的初始值？須寫出C++程式碼。
答案: #include <iostream> using namespace std;  int main() {     int x[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};    // 將1指定給x[0]，2指定給x[1]，...，最後將10指定給x[9]     char y[7] = {'H', 'e', 'l', 'l', 'o'};  //char型別也可以以此類推     char array_name[7] =  Hello! ;  // 還可簡化為字串     return 0; } // main()
評論: good! 👍🏻👍🏻👍🏻 讚
題目: 如何幫陣列元素設定非零的初始值？須寫出C++程式碼。
答案: #include <iostream>  using namespace std;  int main() {    int number[5] = {0, 1, 2, 3, 4};     int number2[] = {0, 1, 2, 3, 4};     return 0;  }  // end main
評論: No explanation, no point!
題目: 如何幫陣列元素設定非零的初始值？須寫出C++程式碼。
答案: 幫陣列初始化為非0的值時，可使用大括號將想輸入的值框起來  #include<iostream> using namespace std; int main(){     int k[10] = {1,2,3,4,5,6,7,8,9,10};     for( int i = 0; i < 10; i++ ) {         cout << k[i] <<    ;     } // for     return 0; } // main()  此時程式輸出為 1 2 3 4 5 6 7 8 9 10
評論: 棒 👍 good! 👍🏻💯
題目: 遞迴呼叫為何會造成記憶體區段錯誤？
答案: 因為在使用遞迴時，未考慮到終止條件或設定不當，造成遞迴式會不斷呼叫自己(無限遞迴)，持續將資料放進記憶體中，直到記憶體不夠用(爆掉)，導致溢位(Overflow)，因此造成記憶體錯誤。
評論: good 👍 讚
題目: 如何幫陣列元素設定非零的初始值？須寫出C++程式碼。
答案: #include <iostream>  using namespace std;  int main(){      int anArray1[ ] = {-1, -1, -1, -1, -1 };      int anArray2[5] = {-2, -2, -2, -2, -2};      for( int i = 0; anArray1[i] == -1 ; i++ ) {         cout << anArray1[i] <<    ;     } // for      cout <<  \n ;      for( int i = 0; i<5 ; i++ ) {         cout << anArray2[i] <<    ;     } // for   } // main()  此時的輸出  -1 -1 -1 -1 -1  -2 -2 -2 -2 -2
評論: 👍 good
題目: 作業二靜態陣列和動態陣列有何差異？指出其優缺點。
答案: 靜態陣列：宣告時要設定陣列長度，待程式結束時記憶體自行釋放                  優點：效率高，不用再釋放記憶體                  缺點： 大小固定，不能彈性運用  動態陣列：宣告時不用設定陣列長度，待程式結束時記憶體不會自行釋放                  優點：可以有效地運用空間                  缺點：效率低，需自行釋放記憶體
評論: Nice 讚 👍 棒
題目: 遞迴呼叫為何會造成記憶體區段錯誤？
答案: 在遞迴的每一步想要回傳，但仍然有沒辦法處理的部份時，就會先把目前的東西，放到記憶體裡叫做 stack (堆棧) 的地方   	若遞迴呼叫過量使堆疊爆了，就會造成 Stack Overflow Error 。 	無限遞迴，終止條件未設定好，導致的堆疊溢位
評論: 👍🏻 讚
題目: 遞迴呼叫為何會造成記憶體區段錯誤？
答案: 在執行遞迴函數時電腦會先把資料放在記憶體stack的地方,但如果資料太多或是忘記設置終止條件導致在回傳之前把stack塞爆了就會出現stack overflow的狀況
評論: 可惜點讚數和回應數都偏低。
題目: 遞迴呼叫為何會造成記憶體區段錯誤？
答案: 遞回呼叫在進行完成前，會將資料傳給stack（堆疊）裏面，而如果資料超過stack的空間的話，就會造成堆棧溢位，也稱為stack overflow，這也是造成記憶體區段錯誤的原因之一。  以下是一些導致儲存器段錯誤的一般原因：  試圖訪問不存在的內存空間（進程內存空間以外）  試圖訪問沒有權限的內存空間（例如：訪問操作系統內核的內存地址）  試圖寫入至只讀內存段（例如：代碼段）  以下是一些導致儲存器段錯誤的一般編程錯誤：   引用空指針 引用未初始化的野指針  引用已經被調用free()函數釋放了的懸空指針  緩衝區溢出  堆棧溢出 （本問題的原因）  運行未正確編譯的程序（儘管存在編譯時錯誤，某些編譯器依然會輸出可執行文件）  ref.https://zh.wikipedia.org/wiki/%E8%A8%98%E6%86%B6%E9%AB%94%E5%8D%80%E6%AE%B5%E9%8C%AF%E8%AA%A4
評論: 進程？野指針？堆棧溢出？  可以參考網路資源，但是請以自己的文字敘述，那才是屬於自己理解及表達的真實內容！  下次再犯，所有的額外加分歸零！
題目: 如何幫陣列元素設定非零的初始值？須寫出C++程式碼。
答案: #include <iostream>  using namespace std;  int main(){      int num[5] = {1, 2, 3, 4, 5}; //給予大小&&數值      int num2[] = {1, 2, 3, 4, 5}; //由給予幾個數字判斷牠的大小  }
評論: 👍 👍 讚
題目: 作業二靜態陣列和動態陣列有何差異？指出其優缺點。
答案: 靜態陣列，      優點：效率快，自動釋放記憶體 。缺點： 記憶體空間不能彈性應用，增減資料須移動的資料量龐大 ( 若資料量多 )。  動態陣列，     優點：能彈性應用記憶體空間。缺點：效率慢，需自行釋放記憶體。
評論: 👍 👍
題目: 如何幫陣列元素設定非零的初始值？須寫出C++程式碼。
答案: #include <iostream>  #include <algorithm>  using namespace std;  int main(){    int array[100] = {-1}; // error: 這個語法只有第一個值是-1，其他為0    std::fill_n(array, 100, -1); // correct: 在<algorithm>裡的用法，可以使array裡的元素都為-1  }   ref: https://www.796t.com/post/MTg2YQ==.html#google_vignette
評論: Good!
題目: 作業二採用什麼資料結構儲存讀入資料，須說明原因。
答案: 這次的作業2是用vector來儲存大量的資料，vector算資料結構的陣列的改造版，也就是所謂的動態陣列，它的好處是不需設定大小，但缺點也是隨之而來的因為沒有像靜態先分配好記憶體所以function(其他funciton可用)結束時也不會被自動釋放，需要手動去才行。 雖然他有push back 和pop 這兩個用起來像stack(堆)的觀念先進後出的概念。  但我覺得這次的作業的來講是用我覺得vector比較算是佇列(quene)先進先出的概念，因為我們是把資料全部存在vector後，再到output那邊從我們第一個存的資料一個一個得下去到最後一個。
評論: 結束時也不會被自動釋放，需要手動去才行。   以上不太正確，vector宣告的變數結束時會自動釋放空間。  Ref.  https://www.learncpp.com/cpp-tutorial/an-introduction-to-stdvector/  https://cplusplus.com/reference/vector/vector/