首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ 探索之旅(九):數組完全指南——靜態、動態、多維與字符串

     編輯:關於C++

課程簡介

「C++ 探索之旅」第一部分第 9 課:數組威武,動靜合一。前序課程覆蓋變量、流程控制、函數、文件組織,本課系統講解數組概念、靜態/動態數組、多維數組及字符串本質。

為什麼需要數組?

存儲同類型多個變量(如前 10 名得分、用戶名列表)。不用數組需聲明大量單獨變量,無法循環處理。

靜態數組

聲明

int const SIZE = 5;
int scores[SIZE];           // 5 個 int
double angles[3] = {30,45,60};  // 初始化列表

  • 大小編譯期確定,常量表達式
  • 內存棧上分配,連續塊
  • 下標從 0 開始:scores[0] 為第一個

遍歷

for (int i = 0; i < SIZE; ++i) cout << scores[i] << endl;

作為函數參數

  • 隱式退化為指針,必須額外傳遞大小
  • 無法返回靜態數組
  • 實參傳遞實為引用(可修改原數組)
double average(double arr[], int size) {  // size 必傳
    double sum = 0;
    for (int i=0; i

動態數組:std::vector

聲明與初始化

#include 
vector v1(5);           // 5 個 0
vector v2(5, 3);        // 5 個 3
vector names(10, "匿名");
vector empty;        // 空向量

核心操作

操作函數說明
尾部添加push_back(val)擴容自動處理
尾部刪除pop_back()不返回值
獲取大小size()當前元素數
訪問元素v[i] / at(i)at 含邊界檢查

作為函數參數

void process(const vector& v) {  // const 引用:避免拷貝、防修改
    for (int x : v) cout << x << ' ';
}
vector create(int n) { return vector(n, 0.0); }  // 可返回

多維數組

靜態二維

int const ROWS = 5, COLS = 4;
int matrix[ROWS][COLS];
matrix[2][3] = 99;  // 第 3 行第 4 列

  • 內存按行主序連續存儲
  • 大小固定,適合矩陣、棋盤等固定結構

動態二維

vector> grid;
grid.push_back(vector(5));      // 添加一行 5 列
grid.push_back(vector(3, 4));   // 添加一行 3 列全 4
grid[0].push_back(8);                // 第一行尾部添加
grid[2][3] = 9;                      // 訪問(需確保存在)

  • 每行長度可不同(鋸齒數組)
  • 非連續內存,緩存局部性較差
  • 高維遞歸嵌套 vector>>

字符串:本質是字符動態數組

std::string 類似 vector,支援 size()、push_back()、operator+=、下標訪問。

字符訪問與修改

string name = "Julien";
name[0] = 'L';  // "Lucien"
cout << name[2] << endl;  // 'c'

常用操作

string s = "Hello";
cout << s.size() << endl;      // 5
s.push_back('!');              // "Hello!"
s += " World";                 // "Hello! World"
string a = "Albert", b = "Einstein";
string full = a + " " + b;     // "Albert Einstein"

總結

特性靜態數組vector多維靜態多維 vector
大小固定可變固定可變
內存棧/全局堆棧/全局堆(非連續)
函數傳遞需傳大小自帶 size()需傳維度引用傳遞
返回不可可不可可
適用場景大小已知、高性能大小動態、通用矩陣、固定網格鋸齒、動態網格

下一課預告

第 10 課:文件讀寫,海闊憑魚躍 —— 學習 fstream 實現數據持久化。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved