📜  向量插入到结尾 (1)

📅  最后修改于: 2023-12-03 15:22:58.763000             🧑  作者: Mango

向量插入到结尾

在程序开发中,向量是一个常用的数据结构。向量通常是一个可变长度的数组,可以通过向其末尾插入新元素的方式来扩展其长度。本文将介绍如何在向量的末尾插入新元素。

向量的基本使用

在大多数编程语言中,向量通常被实现为一个类(或结构体),该类/结构体具有以下基本属性和方法:

  • size():返回向量的当前大小(即元素的数量)。
  • empty():返回一个布尔值,指示向量是否为空。
  • push_back(elem):将 elem 插入到向量的末尾。
  • pop_back():删除向量末尾的元素。
  • at(index):返回向量中指定索引位置的元素。
  • operator[](index):同 at() 方法,用于以数组访问的方式获取或设置元素。
  • ...

例如,在 C++ 中,可以使用标准库提供的 std::vector 类来表示一个向量:

#include <vector>

std::vector<int> vec; // 定义一个空的向量
vec.push_back(1); // 向向量末尾插入元素
vec.push_back(2);
vec.push_back(3);
int n = vec.size(); // 获取向量的大小
int x = vec[1]; // 获取第二个元素(下标从 0 开始)

在其他语言中也有类似的使用方式,只是语法略有不同而已。

向量插入新元素

向量通常是可变长度的,也就是说,当需要添加新元素时,可以直接调用 push_back() 方法将其插入到向量的末尾:

vec.push_back(4); // 向向量末尾插入元素

这里插入了一个值为 4 的新元素。向量的大小也会相应地增加:

int m = vec.size(); // 获取向量的新大小
// m == n + 1

注意,向量的插入操作有以下两个特点:

  • 插入新元素会改变原向量的大小;
  • 插入位置始终是向量的末尾。

因此,如果需要在向量的中间插入新元素,则需要使用其他方法,例如 insert()

案例分析

下面是一个简单的案例分析,展示如何使用向量实现一个简单的数字谜题游戏。

游戏规则
  1. 系统生成一个由 0 到 9 的随机数字序列,长度为 4。

  2. 玩家可以猜测一个长度为 4 的数字序列。

  3. 系统会根据玩家猜测的数字序列,返回以下提示:

    • 数字和位置都正确的个数;
    • 数字正确但位置错误的个数。
  4. 如果玩家猜测的数字序列与系统生成的数字序列完全相同,则游戏胜利。

实现思路

为了简化开发,我们只考虑控制台命令行界面下的实现方式。

首先,我们可以定义一个向量存储系统生成的数字序列:

std::vector<int> answer; // 答案序列

使用随机数生成器生成序列内容:

#include <algorithm> // 随机数生成器需要使用该头文件

// 产生 0 到 9 的随机数
std::random_device rd;
std::mt19937 mt(rd());
std::uniform_int_distribution<int> dist(0, 9);

// 生成答案序列
std::generate_n(std::back_inserter(answer), 4, [&]() {
    return dist(mt); // 返回一个随机数
});

然后,我们可以定义一个向量存储玩家猜测的数字序列:

std::vector<int> guess; // 猜测序列

使用 push_back() 方法向向量末尾插入玩家猜测的数字:

int digit = ...; // 玩家输入的数字
guess.push_back(digit);

接下来,我们可以写一个函数来判断玩家猜测的数字序列是否与系统生成的数字序列相同:

bool check_answer(const std::vector<int>& answer, const std::vector<int>& guess) {
    int count1 = 0; // 数字和位置都正确的个数
    int count2 = 0; // 数字正确但位置错误的个数

    for (int i = 0; i < 4; i++) {
        if (guess[i] == answer[i]) {
            // 数字和位置都正确
            count1++;
        } else if (std::find(answer.begin(), answer.end(), guess[i]) != answer.end()) {
            // 数字正确但位置错误
            count2++;
        }
    }

    if (count1 == 4) {
        // 全部猜对,游戏胜利
        return true;
    } else {
        // 显示提示信息
        std::cout << count1 << "A" << count2 << "B" << std::endl;
        return false;
    }
}

该函数使用了一个简单的算法,统计玩家猜测的数字序列中数字和位置都正确的个数和数字正确但位置错误的个数。如果全部猜对,则返回 true 表示游戏胜利;否则返回 false 并显示提示信息。

最后,我们可以写一个主循环来实现游戏过程:

while (true) {
    // 玩家输入数字
    int digit = ...;

    // 向 guess 中插入数字
    guess.push_back(digit);

    // 检查答案
    if (check_answer(answer, guess)) {
        // 游戏胜利,结束循环
        break;
    }
}

这里的主循环每次从玩家输入获取一个数字,将其插入到 guess 中,然后检查与 answer 是否相同。如果全部猜对,则游戏胜利,结束循环。

总结

向量是一种非常有用的数据结构,我们可以通过向其末尾插入新元素的方式来动态扩展其大小。在程序开发中,向量经常被用于存储一组数字、字符串等类型的数据,同时也可以支持多种操作,例如插入、删除、遍历等。希望本文能对大家学习和使用向量有所帮助。