• 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 条评论

目前还没有评论...