Q145.
下列關於C++的vector 樣版類別的使用那些是錯誤的?
電腦軟體設計(C++) · 乙級 · C++ · Q145
難易度分析
4 / 5
本題採取複選形式,要求考生同時分析多個程式碼片段。難度在於需精確區分執行時的邊界問題與編譯時的型別不匹配,並判別 C++ 隱式型別轉換的合法性,涉及多個不同的錯誤分析維度。
正確答案 (複選):①, ④
- ① 甲:甲程式碼在只 push_back 一個元素後,以索引 1 存取 v1[1],但有效索引僅有 0,屬於 超出邊界(out-of-bounds) 的未定義行為。
- ④ 丁:丁程式碼中 v1 的型別為 `vector<vector<int>>`,但 push_back 傳入的是 指標型別 `vector<int>*`,與容器元素型別 vector<int> 不符,無法編譯。
錯誤選項解析
- ② 乙:乙程式碼將浮點數 1.5 傳入 `vector<int>` 的 push_back,會發生 隱式型別轉換(截斷為整數 1),語法正確可編譯。
- ③ 丙:丙程式碼將整數 1 傳入 `vector<char>` 的 push_back,整數會 隱式轉換為 char 型別(ASCII 值 1),語法正確可編譯。
Learning Tip
"此題考點為 vector 的型別安全 與 索引邊界檢查。常考陷阱:(1) `vector` 不提供執行期邊界檢查,`operator[]` 超出範圍會導致 未定義行為,應使用 `at()` 取得安全存取;(2) C++ 的 隱式型別轉換 可能導致資料截斷但不會報錯;(3) 容器模板參數必須與 push_back 傳入的型別 完全匹配,指標與物件不可混用。"
學員答題分佈
①甲0%
②乙0%
③丙0%
④丁0%
此答題分佈是根據學員在 LongePass 模擬考等實際作答紀錄計算而成。與考友分享這道歷屆試題與詳細解析!