计算机科学 3
第 9-13 关
📜

一维列表 (List / Array)

Collections of Data

🔢 0号开始
🔄 自动点名
🎒

什么是列表 (List)?

可以把它想象成:一排排好队的椅子

每个椅子上坐着一个人(元素),每个椅子都有一个号码(索引)。

// C++ 中通常使用 vector 来表示动态列表 auto friends = {"Joan", "Ronan", "Nikita"};

大括号 {} 或函数返回的数组表示这是一个列表。

👩‍🦰
👱‍♂️
🧒
Friends List
0️⃣

索引:从 0 开始数!

在程序世界里,第一个位置是 0,不是 1!

auto items = hero.findItems(); auto gem0 = items[0]; // 第1个 auto gem1 = items[1]; // 第2个 auto gem2 = items[2]; // 第3个
"0-based index: 就像尺子刻度从0开始。"
💎
items[0]
0
💎
items[1]
1
💎
items[2]
2
鼠标悬停查看代码
🤝

实战 I:团队合作

我们要分别指挥每个人去拿不同的宝石。

int main() { auto items = hero.findItems(); // 第1颗给 Bruno auto gem0 = items[0]; hero.say("Bruno " + gem0); // 第2颗给 Matilda hero.say("Matilda " + items[1]); // 第3颗我自己拿 auto gem2 = items[2]; hero.moveXY(gem2.pos.x, gem2.pos.y); return 0; }
💎 💎 💎
👇 👇 👇
👱‍♂️ 👩‍🦰 🤠
📏

列表长度:size()

想知道队伍里有几个人?用 .size() 方法。

auto enemies = hero.findEnemies(); // 安全检查:确保有人再打 if (enemies.size() > 0) { auto first = enemies[0]; hero.attack(first); }

安全检查:只有当长度 > 0 时,才能去打第 0 个敌人。否则会扑空(报错)!

👾
👾
size() = 2
🔄

实时更新 (Update)

战场瞬息万变,每一轮循环都要重新“点名”。

while (true) { // 每一轮重新获取最新名单 auto neutrals = hero.findEnemies(); if (neutrals.size()) { hero.say(neutrals[0]); } else { hero.say("没人了"); } }
"不能拿着旧名单去点名,新同学可能刚进来,旧同学可能走了。"
📸

Loop 里的每一次 find
都是一张新快照

👉

遍历:挨个点名

while 循环加上 index 变量,可以把列表里的每个人都问候一遍。

int friendIndex = 0; // 只要索引小于总人数 while (friendIndex < friendNames.size()) { auto name = friendNames[friendIndex]; hero.say(name + ", go home!"); // 指向下一位 friendIndex += 1; }
👉
0. Joan
1. Ronan
2. Nikita
3. Augustus
🎓

列表大师口诀

"方括号 [] 是队伍,
index 0 是排头兵。"
".size() 告诉你有多长,
while 循环挨个查!"
📜