- C++
vector入门到放弃2
- 2025-2-16 16:35:41 @
我们来点更酷的玩法~ 🚀(用魔法书包的比喻继续展开)
🌟 Part 1:给书包里的东西排序
📦 基础排序(从小到大)
#include <algorithm> // 必须带上这个魔法咒语!
vector<int> nums = {5, 2, 9, 1, 5};
sort(nums.begin(), nums.end()); // 排序后:1,2,5,5,9
🍭 给糖果按名字排序
vector<string> candies = {"🍬", "🍭", "🍫"};
sort(candies.begin(), candies.end()); // 按字母排序 → 🍫 🍬 🍭
🎯 自定义排序规则(比如按字符串长度)
// 定义一个比较函数(就像告诉魔法书如何比较大小)
bool compare(string a, string b) {
return a.size() < b.size(); // 按长度从小到大排
}
vector<string> fruits = {"apple", "kiwi", "banana"};
sort(fruits.begin(), fruits.end(), compare); // 排序后:kiwi(4), apple(5), banana(6)
🎨 Part 2:二维魔法书包(像格子柜)
📌 创建一个3x3的格子柜(二维vector)
vector<vector<int>> grid(3, vector<int>(3)); // 3行3列,默认值0
// 相当于:
// [ [0,0,0],
// [0,0,0],
// [0,0,0] ]
✨ 动态创建的二维书包
vector<vector<string>> magicBox; // 先创建一个空盒子
// 添加第一层格子(小书包)
vector<string> layer1 = {"🍎", "🍌"};
magicBox.push_back(layer1);
// 添加第二层格子
magicBox.push_back({"🍭", "🍬", "🍫"});
// 现在magicBox的结构:
// [ ["🍎","🍌"],
// ["🍭","🍬","🍫"] ]
🔍 访问二维书包的元素
cout << magicBox[0][1]; // 输出第一层的第二个元素:🍌
magicBox[1][2] = "🍩"; // 修改第二层的第三个元素为甜甜圈
📝 用双重循环遍历二维书包
for(int i=0; i<magicBox.size(); i++) { // 遍历每一层
for(int j=0; j<magicBox[i].size(); j++) { // 遍历当前层的每个元素
cout << magicBox[i][j] << " ";
}
cout << endl;
}
🚀 综合应用:成绩表排序
假设有一个班级的成绩表,需要按总分排序:
// 每个学生的成绩:语文, 数学, 英语
vector<vector<int>> scores = {
{90, 85, 88},
{78, 92, 80},
{85, 90, 95}
};
// 自定义排序规则:按总分从高到低
bool compareTotal(vector<int>& a, vector<int>& b) {
int sumA = a[0]+a[1]+a[2];
int sumB = b[0]+b[1]+b[2];
return sumA > sumB; // 降序排列
}
sort(scores.begin(), scores.end(), compareTotal);
// 排序后:
// 学生3:85+90+95=270
// 学生1:90+85+88=263
// 学生2:78+92+80=250
💡 为什么学这些?
- 排序:整理游戏排行榜、商品价格排序
- 二维vector:表示地图网格、学生成绩表、图片像素点
🎮 互动挑战
试试用二维vector画一个迷宫地图:
vector<vector<char>> maze = {
{'#','#','#','#','#'},
{'#',' ',' ',' ','#'},
{'#',' ','#',' ',' '},
{'#',' ','#','#','#'},
{'#','#','#','#','#'}
};
// '#' 代表墙,' ' 代表路,你能找到出口吗?🕵️
0 条评论
目前还没有评论...