Serie: C++
cpp
177 líneas
· Actualizado 2026-04-03
arrays.cpp
C++/Part1_基礎入門/Ch05_陣列與字串/arrays.cpp
// ============================================================
// Ch05 — 陣列(Arrays)
// 編譯:g++ -std=c++17 -Wall -o arrays arrays.cpp
// ============================================================
#include <iostream>
#include <array>
// ── 函式原型 ──
void printArray(const int arr[], int size);
double average(const int arr[], int size);
void printMatrix(const int matrix[][4], int rows);
// ── 主程式 ────────────────────────────────────────
int main() {
std::cout << "===== Ch05:陣列 =====\n\n";
// ── 1. 宣告與初始化 ──
std::cout << "【1】宣告與初始化\n";
int a[5] = {10, 20, 30, 40, 50}; // 完全初始化
int b[5] = {1, 2}; // 部分初始化,其餘為 0
int c[] = {100, 200, 300}; // 編譯器推算大小為 3
std::cout << "a[] = ";
printArray(a, 5);
std::cout << "b[] = ";
printArray(b, 5);
std::cout << "c[] = ";
printArray(c, 3);
std::cout << "\n";
// ── 2. 存取與修改元素 ──
std::cout << "【2】存取與修改元素\n";
std::cout << "a[0] = " << a[0] << "(第一個元素)\n";
std::cout << "a[4] = " << a[4] << "(最後一個元素)\n";
a[2] = 999;
std::cout << "修改 a[2] = 999 後:";
printArray(a, 5);
std::cout << "\n";
// ── 3. 走訪方式 ──
std::cout << "【3】走訪方式\n";
int scores[] = {85, 92, 78, 95, 88, 76, 90};
int scoresSize = sizeof(scores) / sizeof(scores[0]);
// 3a. 傳統 for 迴圈
std::cout << "傳統 for 迴圈:";
for (int i = 0; i < scoresSize; i++) {
std::cout << scores[i] << " ";
}
std::cout << "\n";
// 3b. 範圍 for 迴圈
std::cout << "範圍 for 迴圈:";
for (int score : scores) {
std::cout << score << " ";
}
std::cout << "\n";
// 3c. 範圍 for 迴圈(搭配 auto)
std::cout << "auto 推導型別:";
for (auto val : scores) {
std::cout << val << " ";
}
std::cout << "\n";
std::cout << "平均分數:" << average(scores, scoresSize) << "\n\n";
// ── 4. sizeof 取得陣列大小 ──
std::cout << "【4】sizeof 與陣列大小\n";
std::cout << "sizeof(scores) = " << sizeof(scores) << " 位元組\n";
std::cout << "sizeof(int) = " << sizeof(int) << " 位元組\n";
std::cout << "元素數量 = " << sizeof(scores) / sizeof(scores[0]) << "\n\n";
// ── 5. 多維陣列(2D 矩陣) ──
std::cout << "【5】多維陣列(2D 矩陣)\n";
int matrix[3][4] = {
{ 1, 2, 3, 4},
{ 5, 6, 7, 8},
{ 9, 10, 11, 12}
};
std::cout << "3×4 矩陣:\n";
printMatrix(matrix, 3);
// 存取特定元素
std::cout << "matrix[1][2] = " << matrix[1][2] << "(第 2 列第 3 行)\n\n";
// 矩陣走訪
std::cout << "巢狀迴圈走訪:\n";
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
std::cout << matrix[i][j] << "\t";
}
std::cout << "\n";
}
std::cout << "\n";
// ── 6. std::array(C++11) ──
std::cout << "【6】std::array\n";
std::array<int, 5> stdArr = {11, 22, 33, 44, 55};
std::cout << "std::array 內容:";
for (int val : stdArr) {
std::cout << val << " ";
}
std::cout << "\n";
std::cout << "size() = " << stdArr.size() << "\n";
std::cout << "front() = " << stdArr.front() << "\n";
std::cout << "back() = " << stdArr.back() << "\n";
std::cout << "at(2) = " << stdArr.at(2) << "\n";
// std::array 可以直接比較
std::array<int, 5> stdArr2 = {11, 22, 33, 44, 55};
std::cout << "stdArr == stdArr2 ? "
<< (stdArr == stdArr2 ? "是" : "否") << "\n\n";
// fill 填充
std::array<int, 5> filled;
filled.fill(0);
std::cout << "fill(0) 後:";
for (int val : filled) {
std::cout << val << " ";
}
std::cout << "\n\n";
// ── 7. C 陣列 vs std::array 比較 ──
std::cout << "【7】C 陣列 vs std::array\n";
std::cout << "┌──────────────┬──────────────────┬──────────────────┐\n";
std::cout << "│ 特性 │ C 陣列 │ std::array │\n";
std::cout << "├──────────────┼──────────────────┼──────────────────┤\n";
std::cout << "│ 大小資訊 │ 傳入函式時遺失 │ 保留 size() │\n";
std::cout << "│ 邊界檢查 │ 無 │ at() 有檢查 │\n";
std::cout << "│ 可比較 │ 否 │ 是 │\n";
std::cout << "│ 可賦值 │ 否 │ 是 │\n";
std::cout << "│ STL 相容 │ 有限 │ 完全 │\n";
std::cout << "└──────────────┴──────────────────┴──────────────────┘\n";
return 0;
}
// ── 函式定義 ──────────────────────────────────────
// 陣列傳入函式時退化為指標,必須額外傳入大小
void printArray(const int arr[], int size) {
std::cout << "{ ";
for (int i = 0; i < size; i++) {
std::cout << arr[i];
if (i < size - 1) std::cout << ", ";
}
std::cout << " }\n";
}
double average(const int arr[], int size) {
if (size <= 0) return 0.0;
int sum = 0;
for (int i = 0; i < size; i++) {
sum += arr[i];
}
return static_cast<double>(sum) / size;
}
void printMatrix(const int matrix[][4], int rows) {
for (int i = 0; i < rows; i++) {
std::cout << " [ ";
for (int j = 0; j < 4; j++) {
std::cout << matrix[i][j] << "\t";
}
std::cout << "]\n";
}
}
Artículos relacionados
C++
c
Actualizado 2026-07-21
deviceAlpha.h
deviceAlpha.h — c source code from the C++ learning materials (C++/Mavis_Homework/FinalProject/deviceAlpha.h).
Leer artículo →
C++
c
Actualizado 2026-07-21
finalproject.c
finalproject.c — c source code from the C++ learning materials (C++/Mavis_Homework/FinalProject/finalproject.c).
Leer artículo →
C++
cpp
Actualizado 2026-07-21
finalproject.cpp
finalproject.cpp — cpp source code from the C++ learning materials (C++/Mavis_Homework/FinalProject/finalproject.cpp).
Leer artículo →
C++
c
Actualizado 2026-07-21
deviceAlpha.h
deviceAlpha.h — c source code from the C++ learning materials (C++/Mavis_Homework/Lab8/deviceAlpha.h).
Leer artículo →
C++
c
Actualizado 2026-07-21
lab8.c
lab8.c — c source code from the C++ learning materials (C++/Mavis_Homework/Lab8/lab8.c).
Leer artículo →
C++
cpp
Actualizado 2026-07-21
lab8.cpp
lab8.cpp — cpp source code from the C++ learning materials (C++/Mavis_Homework/Lab8/lab8.cpp).
Leer artículo →