LONGEPASS
電腦軟體設計(C++)/C++/Q150
中等
正確率 -
Q150.

v1 是C++的vector 樣版類別所宣告的一個物件,下列那些指令可用來隨機存取v1 中註標(index)為3 的資料:

電腦軟體設計(C++) · 乙級 · C++ · Q150

難易度分析

3 / 5

本題採複選形式,要求考生能精確區分 C++ 容器中多種不同的存取語法,並辨識成員函式呼叫的正確格式,增加了判斷的複雜度。

正確答案 (複選):②, ③, ④

  • ② v1.at:v1.at(3) 是 `vector` 提供的成員函式,會進行邊界檢查 (bounds checking),若索引超出範圍會拋出 std::out_of_range 例外,屬於安全的隨機存取方式。
  • ③ (3)v1[3]:v1[3] 使用重載的運算子 [] (operator[]) 直接存取指定索引位置的元素,這是 `vector` 最常用的隨機存取語法,但不進行邊界檢查,執行效率較高。
  • ④ v1.data()[3]:v1.data()[3] 先呼叫 data() 取得指向 `vector` 內部連續記憶體的原始指標 (pointer),再以指標運算 [3] 存取該位置元素,此為 C++11 引入的功能,適用於需要與 C 風格 API 互動的情境。

錯誤選項解析

  • ① v1.data[3]:v1.data[3] 是錯誤寫法,因為 data 是 `vector` 的成員函式而非成員變數,必須加上括號呼叫為 data() 才能取得底層陣列指標,直接使用 data[3] 會導致編譯錯誤。
Learning Tip

"本題核心考點為 C++ vector 的隨機存取機制。常考陷阱在於混淆 data(成員變數寫法,錯誤)與 data()(成員函式呼叫,正確)。需注意 operator[] 與 data() 不進行邊界檢查,執行速度快但可能引發緩衝區溢位 (buffer overflow);而 at() 雖有邊界檢查保障,但會帶來額外的效能開銷。實務上應依情境選擇:除錯階段或輸入來源不可信時使用 at(),效能關鍵且已確認索引合法時使用 [] 或 data()。"

學員答題分佈

①v1.data[3]0%
②v1.at0%
③(3)v1[3]0%
④v1.data()[3]0%

此答題分佈是根據學員在 LongePass 模擬考等實際作答紀錄計算而成。與考友分享這道歷屆試題與詳細解析!

相似類型題目