int n; cin >> n;
int list[n-1]; // 錯誤:C++ 標準不支援變長數組 (VLA)
// 部分編譯器 (GCC) 作為擴展支援,但 MSVC/標準模式報錯
#include
#include // std::sort
#include
int main() {
int n; std::cin >> n;
std::vector list(n); // 動態數組,自動管理內存
for (int i = 0; i < n; ++i) std::cin >> list[i];
std::sort(list.begin(), list.end()); // O(N log N),比冒泡快得多
for (int i = 0; i < n; ++i) {
if (i) std::cout << ' ';
std::cout << list[i];
}
return 0;
}
// 冒泡排序修正版
for (int i = 0; i < n - 1; ++i) {
for (int j = 0; j < n - 1 - i; ++j) { // 邊界修正:j < n-1-i
if (list[j] > list[j + 1]) {
std::swap(list[j], list[j + 1]);
}
}
}
| 概念 | 說明 |
|---|---|
| VLA (Variable Length Array) | C99 標準特性,C++ **從未** 標準化;GCC/Clang 作為擴展支援,MSVC 不支援。 |
| `std::vector` | C++ 動態數組首選,RAII 自動釋放,支援隨機訪問、擴容、算法庫配合。 |
| `std::sort` | 內省排序,平均 O(N log N),生產代碼首選;手寫排序僅為學習算法邏輯。 |
| 邊界條件 | 冒泡內層 `j < n-1-i`,避免 `j+1` 越界;外層 `i < n-1` 足夠。 |
**現代 C++:拒絕 VLA,擁抱 `vector` + `algorithm`,代碼更短、更快、更安全。**